在 Android 应用中监听权限设置界面定位权限开启,可以通过 ActivityResultLauncher 和 Intent 对象来实现。具体步骤如下:
在 AndroidManifest.xml 文件中添加定位权限声明:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
创建一个 ActivityResultLauncher 对象,并实现 ActivityResultCallback 接口:
ActivityResultLauncher<Intent> permissionSettingLauncher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
result -> {
// 在权限设置界面返回后的回调函数中,检查定位权限是否已被授予
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// 定位权限已被授予
} else {
// 定位权限被拒绝
}
});
其中,permissionSettingLauncher 是自定义的 ActivityResultLauncher 对象,用于启动权限设置界面并在界面返回后接收结果。
在应用中请求定位权限,可以使用如下代码:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_PERMISSION);
} else {
// 定位权限已被授予
}
其中,REQUEST_LOCATION_PERMISSION 是自定义的请求代码,可以用来在权限请求回调函数中判断请求的权限类型。
在定位权限被拒绝时,启动权限设置界面:
if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) {
// 用户拒绝了定位权限,但是没有勾选“不再询问”,可以继续请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_PERMISSION);
} else {
// 用户拒绝了定位权限,并勾选了“不再询问”,需要引导用户去设置界面手动开启权限
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
permissionSettingLauncher.launch(intent);
}
其中,shouldShowRequestPermissionRationale() 方法用于判断用户是否勾选了“不再询问”,如果用户没有勾选,则继续请求权限;否则,启动权限设置界面。
在启动权限设置界面后,如果用户在设置界面开启了定位权限,则在回调函数中接收到 RESULT_OK 状态码,否则接收到 RESULT_CANCELED 状态码。根据返回的状态码,可以判断用户是否已经开启了定位权限:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
permissionSettingLauncher.launch(intent);
通过上述步骤,就可以在 Android 应用中监听权限设置界面定位权限开启,并在权限开启后获取用户的位置信息。
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓
PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题