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?:"")
}
}
}