Jetpack Compose 权限申请

Compose 版本:1.0.0-beta08

主要代码

/**
 * 权限校验
 */
fun hasPermissions(context: Context, permissions: Array<out String>) = permissions.all {
    ContextCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}

//申请权限
ActivityCompat.requestPermissions(context as Activity, permissions, 1)

使用示例


//权限
val permissions = arrayOf(
    Manifest.permission.CAMERA,
)
val text = MutableLiveData("点击申请权限")

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PermissionTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background,modifier = Modifier.fillMaxSize()) {
                    PermissionRequestButton()
                }
            }
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (!hasPermissions(this, permissions)) {
            text.postValue("未获取权限")

        } else {
            text.postValue("权限已申请")
        }
    }
}

@Composable
fun PermissionRequestButton() {

    val context = LocalContext.current
    //observeAsState 需添加 runtime-livedata 依赖
    val btnText = text.observeAsState()

    Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center){
        Button(onClick = {
            if (!hasPermissions(context, permissions)) {
                //申请权限
                ActivityCompat.requestPermissions(context as Activity, permissions, 1)
            } else {
               text.postValue("权限已申请")
            }
        }) {
            Text(text = btnText.value?:"")
        }
    }
}