我正在使用打印机d11,并尝试使用蓝牙将其连接到我的设备。但我遇到了这个错误:需要android。permission.BLUETOOTH_SCAN对AttributionSource的权限。
我已经添加了权限,但我仍然有错误,它指出我的问题就在这里。
@SuppressLint("MissingPermission")
private fun searchForPrinters() {
val bluetoothManager =
requireActivity().getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothAdapter = bluetoothManager.adapter
if (bluetoothAdapter == null) {
AlertsUtil.showBaseOkWarningDialog(
requireActivity(),
getString(R.string.bluetooth_not_available),
""
)
return
} else if (!bluetoothAdapter!!.isEnabled) {
askToEnableBluetooth()
return
}
// The line that causes the problem
if (bluetoothAdapter?.isDiscovering == true) {
Logger.log(TAG, "cancel start discovery")
bluetoothAdapter?.cancelDiscovery()
}
initBluetoothScanBroadcastReceiver()
bluetoothAdapter?.startDiscovery()
}
在< code>Manifest.xml文件上添加以下权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<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_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
检查用户是否授予权限
private fun isPermissionsGranted(context: Context): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED
} else {
ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
}
}
请求用户允许继续蓝牙扫描。
if (!isPermissionsGranted(activity)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val permissions = mutableSetOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
permissions.add(Manifest.permission.BLUETOOTH_CONNECT)
permissions.add(Manifest.permission.BLUETOOTH_SCAN)
}
ActivityCompat.requestPermissions(
activity, permissions.toTypedArray(), 600
)
}
}
为了在您的Android设备上正确使用蓝牙,需要将以下权限添加到您的清单文件中:-
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
然后应该在运行时请求这些权限,如下面的链接所示:-