Update in der Nähe ungepaarter Bluetooth -Geräte in ListView [Android Studio]Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Update in der Nähe ungepaarter Bluetooth -Geräte in ListView [Android Studio]

Post by Anonymous »

Hinweis: Ich bin völlig neu im Android Studio (Java) und dies ist mein erstes Projekt. < /p>

Ich versuche, alle (gepaarten und ungepaarten) Bluetooth -Geräte zu scannen und eine Liste dieser Geräte auf dem Anwendungsbildschirm anzuzeigen. < /p>

Ich habe es bisher erfolgreich erhalten, eine Liste zu erhalten, aber die folgenden Ausgaben bestehen weiter: < /p>

1) Da neue ungepaarte Geräte gescannt werden, werden früher gescannte Geräte in der Anzeigeliste als Duplikate wiederholt. < /p>

2) Wenn ich Discover-Fähigkeit in einem Gerät ausschalte, wird die Liste nicht aktualisiert und zeigt immer wieder das ausgeschaltete (nicht verfügbare) Gerät in der Liste. Löschen Sie meine Array -Liste, bevor sie aktualisiert wird. Scheint nicht zu funktionieren. Ich verstehe auch, dass es viele Ressourcen auf Stackoverflow und anderen Websites gibt, auf denen ähnliche Themen zur Erstellung der nahe gelegenen Bluetooth -Geräteliste abgeholt werden. Ich habe mehrere von ihnen gefolgt und meinen Code geschrieben, konnte aber auf nichts stoßen, was dieses Problem "Listen -Update" lösen könnte. < /p>

Ich teile den aktuellen Code und die Ergebnisse. Bitte schlagen Sie Änderungen /Ergänzungen vor. < /P>

Schätzen Sie Ihre Zeit und Hilfe. < /p>

Hauptaktivitätsklassencode < /em> < /strong> < /p>


public class MainActivity extends AppCompatActivity {

private static final int REQUEST_ENABLE_BT = 1; //Enable bluetooth request variable
private static final int REQUEST_DISCOVERABILITY = 1 ; //Make bluetooth discoverable request variable

private BluetoothAdapter btAdapter; //Define bluetooth adapter variable

ArrayList deviceList = new ArrayList(); //Store paired devices list
ArrayList newDevices = new ArrayList(); //Store available devices list
ArrayList allDevices = new ArrayList(); //Store all devices for display on screen

ListView btList; //Define list UI item

@Override
protected void onCreate(Bundle savedInstanceState) { //On activity creation do the following

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //Pre-written -- to set layout as screen UI

btList = (ListView)findViewById(R.id.list1); //Set list variable to UI item in layout

btAdapter = BluetoothAdapter.getDefaultAdapter(); //Initialize adapter

if(allDevices != null){

allDevices.clear(); //Clear array to display fresh list
}

int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1;
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, //Ask for permission to turn on location
MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);

}

public void btOn(View view){ //Bluetooth On event

if (btAdapter != null) {

if (!btAdapter.isEnabled()) { //Enable bluetooth if not enables already
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
else{ //If already enabled display list of paired devices

pairedList();

}
}

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_ENABLE_BT) {

if (resultCode == RESULT_OK) {

pairedList(); //If user has enabled bluetooth, show list of paired devices

}

}
}

public void discoverOn(){ //Method for setting bluetooth on discoverable mode
//for 5 minutes
Intent discoverableIntent =
new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivityForResult(discoverableIntent, REQUEST_DISCOVERABILITY);

}

public void scanNewDevices(View view){ //Scan for unpaired available bluetooth devices when "scan button" is clicked

discoverOn(); //Set bluetooth to discoverable

if (btAdapter.isDiscovering()) {
//Bluetooth is already in mode discovery mode, we cancel to restart it again
btAdapter.cancelDiscovery();
}
btAdapter.startDiscovery(); //Start scanning

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

registerReceiver(receiver, filter);

}

public void pairedList(){ //Method gets list of paired devices

Set pairedDevices = btAdapter.getBondedDevices();

if (deviceList != null) { //Clear older list items
deviceList.clear();
}

if(pairedDevices != null) {
for (BluetoothDevice bt : pairedDevices) {

deviceList.add(bt.getName() + '\n' + bt.getAddress()); //Add current items
}
}

Toast.makeText(getApplicationContext(), "Showing Paired Devices",Toast.LENGTH_SHORT).show();

allDevices.addAll(deviceList); //Update final display list

showList(); //Display list on screen

}

//Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
//Discovery has found a device. Get the BluetoothDevice
//object and its info from the Intent.
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

if(newDevices != null){

newDevices.clear(); //Clear earlier list

}

if (device != null ) {

newDevices.add(device.getName() + '\n' + device.getAddress());

allDevices.addAll(newDevices); //Update new devices in final display list

showList(); //Display list
}

}
}
};

@Override
protected void onDestroy() { //When application is closed,
super.onDestroy();
//Unregister the ACTION_FOUND receiver.
unregisterReceiver(receiver);
}

public void showList(){ //Method to set device list to ListView UI

final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, allDevices);

btList.setAdapter(adapter);

}

}

< /code>

Activity_main.xml Code: Um das Layout zu verstehen < /em> < /strong> < /p>










< /code>

Aktuelle Ergebnisse < /em> < /strong> < /p>

Duplicate -Geräteamen und wenn ich diese Geräte ausschalten, werden sie in der Liste immer noch angezeigt. src = "https://i.static.net/gifekm.png"/>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post