我正在编程一个通过蓝牙连接到设备的应用程序,但每次我想用BluetoothDevice
做一些事情时,我必须插入这样的权限检查(Kotlin):
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
42
)
}
是否有一个解决方案与一个单一的权限检查在应用程序的开始?
谢谢!
我们必须检查权限授予,否则可能会导致应用程序崩溃。但我们可以在Kotlin中用非常方便的方法来实现。按照下面的步骤…
在你的MainActivity或Very first activity中,像下面这样请求蓝牙许可。
-
在Activity中创建Permission Callback .
private val requestPermissionsLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -> if (permissions.all { it.value }) Toast.makeText( this, "Permission Granted", Toast.LENGTH_SHORT ).show() else Toast.makeText(this, "not accepted all the permissions", Toast.LENGTH_LONG).show() }
-
请求权限在onCreate活动方法
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //your code requestPermissionsLauncher.launch( arrayOf(android.Manifest.permission.BLUETOOTH_CONNECT) ) //asking permission whatever we need to run app. }
-
创建kotlin扩展功能,以确保只运行在蓝牙权限是理所当然。
fun <T> Context.runOnBluetoothPermission(block: () -> T) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) { block() } else { Toast.makeText( this, "Bluetooth permission need to work this.", Toast.LENGTH_SHORT ).show() } }
-
在任何需要的地方使用它的扩展功能
例子:
在<<p> strong> SecondActivity.ktclass SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//ui functions
//apicalls if any
//functions that only run on Bluetooth permission
runOnBluetoothPermission{
getAllBluetoothDevices()
}
}
private fun getAllBluetoothDevices(){
//your code to get all bluetooth devices.
}
}
用户可以在任何时候撤销权限,通过进入应用程序设置。当权限被撤销时,活动将被重新创建。这意味着您必须在onCreate
之后和使用该权限之前至少检查一次(如果您仍然拥有该权限)。