我有一個應用程序使用藍牙和連接到設備,can'f找到任何設備使用BluetoothAdapter.getDefaultAdapter()。startDiscovery();在發現之前它運行良好。也嘗試過其他應用程序,它也不適用於其他應用程序。但是我嘗試配對的設備(Arduino bt-module)可以在Android設置中找到。任何想法我可以嘗試什麼?我實現了像http://developer.android.com/guide/topics/connectivity/bluetooth.html中描述的一切,並且在更新之前它就工作了。由於棉花糖使用BluetoothAdapter.getDefaultAdapter()更新藍牙發現。startDiscovery();是打破
12
A
回答
30
藍牙適配器已經改變的Android 6.0
您需要設置權限ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION許可,並需要使用 BluetoothLeScanner.startScan()方法來開始掃描。
下面是從更改日誌說明:
爲用戶提供更高的數據保護的用戶,這是Android 6.0,Android的刪除程序訪問設備的本地硬件標識符使用Wi-Fi和藍牙的應用蜜蜂。 WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法現在返回恆定值02:00:00:00:00:00。
訪問通過藍牙和Wi-Fi掃描附近的外部裝置的硬件識別碼,您的應用程序現在必須有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION權限:
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
注意:如果運行的是Android 6.0(API級別的設備23)啓動後臺Wi-Fi或藍牙掃描,該操作對於外部設備是可見的,源自隨機MAC地址。
您可以通過以下鏈接瞭解詳情: http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
5
只啓用位置在設置和它工作得很好!
2
從API級別23,藍牙發現還需要位置訪問權限(ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION)。
而作爲許可屬於「危險」保護級別只是添加到許可清單文件是不夠的。 需要用戶同意才能在運行時請求權限。
添加到許可的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" />
請求ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION在運行時:
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;
}
}
相關問題
- 1. 使用藍牙掃描在棉花糖的位置準確性
- 2. Android中的藍牙設備發現 - startDiscovery()
- 3. 藍牙掃描棉花糖始終可用選項
- 4. 漣漪從棒棒糖打破棉花糖
- 5. 在Android中請求多個藍牙權限棉花糖
- 6. Android 6(棉花糖)Wifi +藍牙有時會導致SocketTimeoutException
- 7. 當使用瓶棉花糖時訪問棉花糖裝飾者
- 8. 在棉花糖
- 9. 安卓棉花糖破舊佈局
- 10. 從android白色棉花糖清除應用程序棉花糖
- 11. 更新應用程序到棉花糖或牛軋糖
- 12. Osmdroid和棉花糖
- 13. 棉花糖許可
- 14. android:textColor不再適用於棉花糖
- 15. Tooleap API不適用於棉花糖?
- 16. Android上的藍牙:startDiscovery不起作用,我啓用了藍牙
- 17. android:相機不打開棉花糖
- 18. 棉花糖RelativeLayout表現奇怪與alignBaseline
- 19. 藍牙低功耗writeCharacteristic中的Nexus 5X返回false與Android棉花糖
- 20. 使用棉花糖不重複自己
- 21. 棉花糖新的許可模式
- 22. Android中的NotificationListenerService棉花糖
- 23. vibrate_when_ringing在Android棉花糖(6.0)
- 24. android棉花糖 - SMS_RECEIVED權限
- 25. 棉花糖權限gmaps
- 26. AudioRecorder問題與棉花糖
- 27. Lvl庫和android棉花糖
- 28. Apps掛在棉花糖
- 29. addTextChangedListener不工作棉花糖
- 30. windowBackground Android中6(棉花糖)
謝謝你的提示,則我的解決方案是添加ACCESS_FINE_LOCATION權限並在運行時請求權限。 – mikugo
@mikugo你還在使用'BluetoothAdapter.getDefaultAdapter()。startDiscovery();'發起發現?這些更改提到使用LEScanner代替棉花糖,並想知道您是否對更換經典的藍牙設備進行了更改。 – jschlepp
@jschlepp是的我正在使用'BluetoothAdapter.getDefaultAdapter()。startDiscovery();'它只是一個小型的大學項目。但也許LEScanner也可以發現經典設備,因爲它們使用相同的頻率。它使用更少的電力。 – mikugo