Ich arbeite derzeit an einer kleinen App, um mit den Diensten zu beginnen, die die Bluetooth-Android-API bereitstellen kann.
Bearbeiten -> Antwort:
Es scheint, dass das Problem auf die spezifischen Nexus 5-Geräte zurückzuführen ist. Scheint, als ob ihr Bluetooth-Empfänger nicht gut funktioniert. Die folgende Lösung sollte für andere Geräte funktionieren
Anmerkung:
-
Ich habe die Dokumentation hier gelesen: http://developer.android.com/guide/topics/connectivity/bluetooth.html
sowie den folgenden Quellcode dieses Tutorials http://www.londatiga.net/it/programming/android/how-to-programmatically-scan-or-discover-android-bluetooth-device/ befindet sich auf github unter /lorensiuswlt/AndroBluetooth -
Ich habe fast alle Funktionen, die mich interessierten, abgeschlossen (z. B. auf Vorhandensein von Adaptern prüfen, Blueooth aktivieren/deaktivieren, gekoppelte Geräte abfragen, den Adapter auffindbar machen).
Ausgabe:
Eigentlich Es wird kein Gerät gefunden wenn ich die Methode .onDiscovery() starte, obwohl Geräte über Einstellungen/Bluetooth auf meinem Nexus 5 gefunden werden.
So handhabe ich es:
public class MainActivity extends AppCompatActivity {
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
...
protected void onCreate(Bundle savedInstanceState) {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
}
Das Filter funktioniert gut soweit ich es versuchen konnte, dh ACTION_STATE_CHANGED (bei Bluetooth-Aktivierung) und die beiden ACTION_DISCOVERY_***.
Die folgende Methode wird dann erfolgreich aufgerufen:
public void onDiscovery(View view)
{
mBluetoothAdapter.startDiscovery();
}
Und dann habe ich meinen Bluetooth-Empfänger:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
if (state == BluetoothAdapter.STATE_ON) {
showToast("ACTION_STATE_CHANGED: STATE_ON");
}
}
else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
mDeviceList = new ArrayList<>();
showToast("ACTION_DISCOVERY_STARTED");
mProgressDlg.show();
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action) && !bluetoothSwitchedOFF) {
mProgressDlg.dismiss();
showToast("ACTION_DISCOVERY_FINISHED");
Intent newIntent = new Intent(MainActivity.this, DeviceListActivity.class);
newIntent.putParcelableArrayListExtra("device.list", mDeviceList);
startActivity(newIntent);
}
else if (BluetoothDevice.ACTION_FOUND.equals(action)) {// When discovery finds a device
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
mDeviceList.add(device);
showToast("Device found = " + device.getName());
}
}
};
Ich habe keine Probleme beim Herauskommen des Logcats und habe während des von mir durchgeführten Tests keine Probleme bemerkt. Das einzige Problem ist das Es wird kein Gerät erkannt am Ende des Scans, wenn viele erkennbare in der Nähe verfügbar sind.
Ich habe versucht, nicht zu viel Code einzufügen, um das Thema nicht zu überschwemmen. Fragen Sie mich, wenn Sie mehr brauchen.
Danke, dass Sie mich gelesen haben, und danke im Voraus für Ihre Antworten.
Ich hatte die Standortberechtigung in meinem Manifest mit Nexus 5 und konnte keine Geräte finden. Was mir fehlte, war, vor der Suche nach Geräten nicht in der MainActivity (oder einer anderen Aktivität, die die Suche hostet) nach einer Standorterlaubnis zu fragen. Das hat das Problem für mich gelöst
– Khasch
1. September 2019 um 19:30 Uhr