kotlin 如何在Android应用中创建单一权限检查?

ztmd8pv5  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(147)

我正在编写一个通过蓝牙连接到设备的应用程序,但每次我想用BluetoothDevice做一些事情时,我都必须插入一个权限检查,如下所示(Kotlin):

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(
        this,
        arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
        42
    )
}

是否有在应用程序开始时进行一次权限检查的解决方案?
谢谢你,谢谢你

2skhul33

2skhul331#

我们必须检查授予的权限,否则它可能会崩溃您的应用程序。但我们可以在Kotlin非常方便的方式。
在您的MainActivity或Very first Activity中,请求蓝牙许可,如下所示。
1.在活动中创建权限回调。

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()
 }

1.在活动的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.
}

1.创建一个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()
 }
 }

1.在任何需要的地方使用它的扩展功能。
例如:
秒活动中.kt

class 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.
    }
}
nuypyhwy

nuypyhwy2#

用户可以在任何时候通过应用设置撤销权限。当权限被撤销时,Activity将被重新创建。这意味着您必须在onCreate之后和使用权限之前至少检查一次,如果您仍然拥有该权限。

TL;DR

否,您的应用程序可能会崩溃。

相关问题