Ich habe eine App mit Bluetooth und die Verbindung zu Geräten, kann finden Sie alle Geräte mit BluetoothAdapter.getDefaultAdapter(). startDiscovery(); Es funktionierte gut vor der Entdeckung. Versuchte auch andere Apps, es funktioniert auch nicht in anderen Apps. Aber das Gerät, das ich versuche zu koppeln (Arduino BT-Modul) kann in Android-Einstellungen gefunden werden. Irgendeine Idee, was könnte ich versuchen? Ich habe alles implementiert wie beschrieben unter http://developer.android.com/guide/topics/connectivity/bluetooth.html und es funktionierte vor dem Update.Seit Marshmallow Bluetooth-Erkennung mit BluetoothAdapter.getDefaultAdapter() aktualisieren. StartDiscovery(); ist defekt
Antwort
Bluetooth-Adapter hat Änderung wurde in Android 6.0
Sie benötigen die Erlaubnis ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION Erlaubnis zu setzen und müssen BluetoothLeScanner.startScan() Methode verwenden, um den Scanvorgang zu starten.
unter der Beschreibung von Änderungsprotokollen ist:
Benutzer mit besseren Datenschutz zu liefern, in Android 6.0, entfernt Android programmatischen Zugriff auf die lokale Hardware-Kennung des Geräts für Anwendungen, die Wi-Fi und Bluetooth APIs. Die Methoden WifiInfo.getMacAddress() und BluetoothAdapter.getAddress() geben jetzt einen konstanten Wert von 02: 00: 00: 00: 00: 00 zurück.
Um das Hardware-IDs von in der Nähe von externen Geräten über Bluetooth und Wi-Fi-Scans zugreifen kann, müssen Sie Ihre App haben nun die ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION Berechtigungen:
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
Hinweis: Wenn ein Gerät mit Android 6.0 (API-Ebene läuft 23) initiiert einen Hintergrund Wi-Fi oder Bluetooth-Scan, der Vorgang ist sichtbar für externe Geräte als aus einer randomisierten MAC-Adresse stammen.
Sie können weitere Informationen über diesen Link erhalten: http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
Gerade Standort in den Einstellungen aktivieren und es funktioniert gut !!
Ab API-Stufe 23 wird auch die Standortzugriffsberechtigung (ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION) für die Bluetooth-Erkennung benötigt.
Und Erlaubnis gerade hinzufügen, in Manifest-Datei ist nicht ausreichend, da die Erlaubnis zu „gefährlich“ Schutzstufe gehört. Die Zustimmung des Benutzers ist erforderlich, um die Berechtigung zur Laufzeit anzufordern.
Added Erlaubnis in AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
Antrag auf ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION zur Laufzeit:
private void accessLocationPermission() {
int accessCoarseLocation = checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION);
int accessFineLocation = checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
List<String> listRequestPermission = new ArrayList<String>();
if (accessCoarseLocation != PackageManager.PERMISSION_GRANTED) {
listRequestPermission.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (accessFineLocation != PackageManager.PERMISSION_GRANTED) {
listRequestPermission.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!listRequestPermission.isEmpty()) {
String[] strRequestPermission = listRequestPermission.toArray(new String[listRequestPermission.size()]);
requestPermissions(strRequestPermission, REQUEST_CODE_LOC);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_LOC:
if (grantResults.length > 0) {
for (int gr : grantResults) {
// Check if request is granted or not
if (gr != PackageManager.PERMISSION_GRANTED) {
return;
}
}
//TODO - Add your code here to start Discovery
}
break;
default:
return;
}
}
Mehr Details über die Erlaubnis: https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
- 1. javax.crypto.Cipher funktioniert anders seit Android 6 Marshmallow
- 2. Android bluetooth: startDiscovery() funktioniert nicht
- 3. Ist Icepick defekt?
- 4. Java: Ist SelectionKey.attach() defekt?
- 5. LINQ - ist SkipWhile defekt?
- 6. R Studio ist defekt
- 7. Ist das Gittersystem defekt?
- 8. Bestätigen, dass Batarang defekt ist
- 9. Ist Xcode Debugging/Absturzbericht in Swift defekt?
- 10. Was passiert mit der AVAudioSession-Instanz, wenn der iphone Lautsprecher defekt/defekt ist?
- 11. RichTextBox.AutoWordSelection defekt?
- 12. Warum ist mein einfacher Komparator defekt?
- 13. AudioRecorder Problem mit Marshmallow
- 14. Was ist in meinem Rails-Setup defekt?
- 15. TextMate Toggle Kommentar Makro ist defekt
- 16. Ist FLAG_ONLY_ALERT_ONCE defekt oder falsch oder beides?
- 17. Ist gcc's -Wequence-point warning flag defekt?
- 18. appwidget listview rows nicht aktualisieren oder laden nach Marshmallow upgrade
- 19. Javascript regex.match defekt?
- 20. Seit OTA Update auf Marshmallow funktioniert meine Gyroscope-basierte App nicht mehr
- 21. Wenn MD5 defekt ist, was ist eine bessere Lösung?
- 22. Scala Eclipse Autocomplete defekt?
- 23. Xuggler Repository Link defekt
- 24. org.apache.http.entity.FileEntity ist in Android 6 (Marshmallow) veraltet
- 25. SonarQube Cycles defekt?
- 26. IntelliJ Idea Terminal defekt mit Windows 10
- 27. GLKTexture ist nicht korrekt zugeordnet seit iOS6
- 28. jquery/javascript - hide div, wenn das Bild defekt ist
- 29. Erkennen, ob ein Bild beschädigt oder defekt ist
- 30. Warum ist der komplexe Typ von .NET defekt?
Danke für den Hinweis, die Die Lösung für mich bestand darin, die Berechtigung ACCESS_FINE_LOCATION hinzuzufügen und die Berechtigung zur Laufzeit anzufordern. – mikugo
@mikugo Verwenden Sie immer noch BluetoothAdapter.getDefaultAdapter().startDiscovery(); 'zum Einleiten der Erkennung? Die Änderungen erwähnen die Verwendung des LEScanners anstelle von Marshmallow und fragen sich, ob Sie die Änderung vorgenommen haben, um sogar nach klassischen Bluetooth-Geräten zu suchen. – jschlepp
@jschlepp Ja, ich benutze 'BluetoothAdapter.getDefaultAdapter(). StartDiscovery();' es war nur ein kleines Universitätsprojekt. Aber vielleicht kann der LEScanner auch klassische Geräte entdecken, weil sie die gleiche Frequenz verwenden. Und es verbraucht weniger Energie. – mikugo