android project - Bluetooth Low Energy StartScan auf Android 6.0 findet keine Geräte




2 Answers

Ich habe mit dem gleichen Problem gekämpft. Um das Problem zu beheben, müssen Sie in den Einstellungen des Telefons "Standort" (GPS) aktivieren und zur Laufzeit in der App Standortberechtigungen anfordern. Beides muss getan werden, damit das Scannen ordnungsgemäß funktioniert.

Um die Standorterlaubnis anzufordern, setze folgendes in einen Dialog oder ähnliches:

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

und implementieren:

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

in yourActivity und handhaben, was auch immer der Benutzer auswählt. Sie müssen außerdem folgende Schritte ausführen, um die Standortdienste 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 Folgendes implementiert wird:

@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 dies so aussehen:

Oder so in der Schnelleinstellung:

Sobald der Benutzer die Berechtigung aktiviert und die Standortdienste gestartet hat, sollten Sie mit dem Scannen beginnen. Ich habe festgestellt, dass, wenn Sie bereits scannen, während Sie die Erlaubnis aktivieren / den onScanResults es immer noch nichts in Ihre onScanResults

Ich bin mir nicht sicher, ob dies ein Bug oder eine "Funktion" für iBeacons / Bluetooth-Werbung ist (HINWEIS: Werbung wie beim Verkauf von Produkten, nicht die technische Bluetooth-Werbung), damit Unternehmen Ihren Standort sehen und Sie dorthin führen können, wo sie wollen.

Hoffe das behebt Ihr Problem!

EDIT Ich wollte hinzufügen: Sie brauchen nur das zum SCANNEN. Sobald Sie mit dem BLE-Gerät verbunden sind, können Sie den Standortdienst auf Ihrem Telefon ausschalten und Sie werden weiterhin mit Ihren Geräten verbunden sein. Sie können jedoch keine neuen Geräte erkennen oder eine Verbindung zu ihnen herstellen, und alle onScanResults werden aus den onScanResults Geräten onScanResults

sample gatt

Ich entwickle eine Anwendung mit Bluetooth Low Energy mit Nexus 5. Es funktionierte auf Lollipop und jetzt funktioniert es nicht auf 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 ScanFilter:

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();

Das 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 Ruf:

mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);

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




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




Related