you are best|

ou尼酱~~~

园龄:4年10个月粉丝:1关注:0

笔记 权限请求,含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 中国大陆许可协议进行许可。

posted @   ou尼酱~~~  阅读(98)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起