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 = "请求权限")
}
}