1、清单文件中涉及的权限:
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
权限可根据自己代码中的需求进行添加或减少。
2、另外,第三方APP,涉及严格的权限控制,除了清单文件中涉及的权限写入外,还需要动态申请权限:
if ((ContextCompat.checkSelfPermission(this,Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED)) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH_CONNECT,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH_SCAN}, REQUEST_BLUETOOTH_PERMISSION); }else { Toast.makeText(this, "已获得BT连接,精确位置信息,蓝牙扫描权限", Toast.LENGTH_SHORT).show(); 执行相关代码**** }
注:
① 访问精确位置的权限是蓝牙和WiFi扫描所必须的权限,没有则无法扫描(startDiscovery()函数会返回false)。
② 访问粗略位置的权限经过测试对结果没有影响,不是必要的。
③ 蓝牙扫描权限是蓝牙测试过程中扫描时的必要权限,虽然没有权限申请弹窗,但是不写蓝牙就无法正常扫描。
④ 建议在测试开始之前将权限全部申请好,避免影响测试结果。