it-swarm.com.de

Bluetooth Low Energy StartScan unter Android 6.0 findet keine Geräte

Ich entwickle eine Anwendung mit Bluetooth Low Energy unter Verwendung von Nexus 5. Es hat mit Lollipop funktioniert, und jetzt funktioniert es nicht mit Marshmallow .. Ich habe die Berechtigungen ACCESS_COARSE_LOCATION und ACCESS_FINE_LOCATION im Manifest und in runTime in der Aktivität festgelegt.

Dies ist die Liste der ScanFilters:

mScanFilterTest = new ScanFilter.Builder().build();
mScanFilter = new ArrayList<ScanFilter>();
mScanFilter.add(mScanFilterTest);

Dies sind die Einstellungen:

mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0)
                .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build();

Dies sind meine Rückrufe:

 mBLEScan = new ScanCallback() {
     @Override
     public void onScanResult(int callbackType, ScanResult result) {
         super.onScanResult(callbackType, result);
         Log.i(TAG, "******************************************");
         Log.i(TAG, "The scan result " + result);
         Log.i(TAG, "------------------------------------------");
         }
     };

Das ist mein Anruf:

mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);

Es startet den Scan, findet aber kein Gerät. Bitte hilf mir!!!!

43
Jacopo Tosi

Ich habe mit dem gleichen Problem zu kämpfen. Um dies zu beheben, müssen Sie "Location" (GPS) in den Einstellungen des Telefons aktivieren sowie zur Laufzeit in der App die Standortberechtigung anfordern. Beide müssen ausgeführt werden, damit das Scannen ordnungsgemäß funktioniert.

Um die Standortberechtigung anzufordern, geben Sie Folgendes in ein Dialogfeld oder ähnliches ein:

yourActivity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, yourPermissionRequestCode);

und umsetzen:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
    if(requestCode == yourPermissionRequestCode)
    {
        ... //Do something based on grantResults
    }
}

in yourActivity und behandeln, was der Benutzer auswählt. Sie müssen auch die folgenden Schritte ausführen, um die Ortungsdienste Ihres Geräts zu aktivieren:

Intent enableLocationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
yourActivity.startActivityForResult(enableLocationIntent, yourServiceRequestCode);

Sie können überprüfen, ob der Benutzer die Standortdienste aktiviert hat, indem Sie Folgendes implementieren:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == yourServiceRequestCode)
    {
        ...//Do whatever you need to
    }
}

in yourActivity. Sie können Standortdienste (GPS) auch manuell aktivieren, indem Sie Folgendes tun:

Enter phone settings -> Select "Location" -> Then turn it on

In den Telefoneinstellungen sollte es so aussehen:

Location (GPS) services enabled in Phone Settings

Oder so in den Schnelleinstellungen:

Location (GPS) services enabled in drop down settings

Nachdem der Benutzer die Berechtigung aktiviert und die Ortungsdienste gestartet hat, sollten Sie mit dem Scannen beginnen. Ich habe festgestellt, dass, wenn Sie bereits scannen, während Sie die Erlaubnis aktivieren/aktivieren, der Ortungsdienst nicht in Ihre onScanResults-Datei eingefügt wird.

Ich bin nicht sicher, ob es sich um einen Fehler oder ein "Feature" für iBeacons/Bluetooth-Werbung handelt (HINWEIS: Werbung wie beim Verkauf von Produkten, nicht die technische Bluetooth-Werbung), damit Unternehmen Ihren Standort sehen und dorthin lenken können, wo sie möchten.

Hoffe, das behebt dein Problem!

EDIT Ich wollte hinzufügen: Sie brauchen dies nur für das Scannen. Sobald Sie mit dem BLE-Gerät verbunden sind, können Sie den Ortungsdienst auf Ihrem Telefon ausschalten, und Sie sind weiterhin mit Ihren Geräten verbunden. Sie können dann jedoch keine neuen Geräte entdecken und keine Verbindung zu ihnen herstellen. Alle Werbegeräte werden von der onScanResults entfernt.

61
V-PTR

Wie @Jacopo Tosi sagt, Sie müssen nach Standortberechtigungen fragen. Sie können hier lesen, wie es geht . Außerdem müssen Sie Location aktivieren. Ich weiß nicht warum das so ist. Aber nur so habe ich es geschafft.

2
Maor Hadad

In meinem Fall (HTC M9) musste ich auch unter Bluetooth in das Android-Einstellungsmenü gehen und manuell nach BT-Geräten suchen.

0
CodingYourLife