笔记 权限请求,含intent和permission同时处理情况
package com.example.composeproject import android.Manifest import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle import android.provider.Settings import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.Button import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import com.example.composeproject.ui.theme.ComposeProjectTheme import com.example.composeproject.util.WifiUtil const val TAG = "Jeck" class MainActivity : ComponentActivity() { private val mGPSLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { if (WifiUtil.isLocationServiceOpen(this)){ checkPermission() }else { // 算了 } } private val mFileLocationDialogLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "前往下一个acty") }else { // 算了 } } private val mFileLocationLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { if (it) { checkPermission() }else { if(!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { val intent = Intent() intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS intent.data = Uri.fromParts("package", this.packageName, null) mFileLocationDialogLauncher.launch(intent) }else { // 算了 } } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposeProjectTheme { // A surface container using the 'background' color from the theme AskPermissionButton { checkPermission() } } } } /** * 面对的场景是某个功能需要: * 1)定位服务,需要用intent前往系统设置打开 * 2)定位权限,运行时权限,动态获取,需要处理永不询问情况 */ fun checkPermission() { if (!WifiUtil.isLocationServiceOpen(this)) { mGPSLauncher.launch(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)) }else if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { mFileLocationLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION) }else { Log.d(TAG, "前往下一个acty") } } } @Composable fun AskPermissionButton(onClick: ()->Unit) { Button(onClick = { onClick() }) { Text(text = "请求权限") } }
本文作者:ou尼酱~~~
本文链接:https://www.cnblogs.com/--here--gold--you--want/p/16059184.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步