Android - Bluetooth-Erkennung findet kein Gerät
Ich arbeite derzeit an einer kleinen App, um mit den Diensten zu beginnen, die die Bluetooth-Android-API bereitstellen kann.
Edit -> Antwort:
Es scheint, dass das Problem an den spezifischen Nexus 5-Geräten lag. 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.htm sowie der folgende Quellcode dieses Tutorialshttp: //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 abgeschlossen, die mich interessiert haben (z. B. die Überprüfung auf das Vorhandensein von Adaptern, das Aktivieren / Deaktivieren der Bluetooth-Funktion, das Abfragen gepaarter Geräte und das Festlegen, dass der Adapter erkannt werden kann).
Problem
Tatsächlichkein Gerät gefunden Wenn ich die .onDiscovery () -Methode starte, obwohl Geräte über Einstellungen / Bluetooth auf meinem Nexus 5 gefunden werden.
Hier geh ich damit um:
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);
}
Dasfilter funktioniert gut soweit ich es versuchen konnte, d. h. ACTION_STATE_CHANGED (bei aktivierter Bluetooth-Funktion) 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 mit dem Logcat und habe während des Tests keine Probleme bemerkt. Das einzige Problem ist, dasskein Gerät wird erkannt am Ende des Scans, wenn viele auffindbare in der Nähe verfügbar sind.
Ich habe versucht, nicht zu viel Code zu schreiben, um das Thema nicht zu überfluten. Frag mich, ob du mehr brauchst.
Danke, dass Sie mich gelesen haben, und vielen Dank im Voraus für Ihre Antworten.