Android - 运行时权限一个工具类搞定

文章详细介绍了如何在Android应用中检查和请求各种自定义权限(如日历、相机、联系人等),包括使用`checkCustomPermission`方法判断权限状态,以及在权限被拒绝时决定是否弹出权限请求窗口或仅显示一次提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • @param customPermissionArray 自定义权限数组

  • @return true已获取自定义权限,false未获取自定义权限

*/

public boolean checkCustomPermission(Context context, String[] customPermissionArray) {

mCustomPermissionArray = customPermissionArray;

if (mCustomPermissionArray == null || mCustomPermissionArray.length == 0) {

return false;

}

isCustomPermissionOk = true;

mPermissionList.clear();

for (int i = 0; i < mCustomPermissionArray.length; i++) {

if (ContextCompat.checkSelfPermission(context, mCustomPermissionArray[i]) != PackageManager.PERMISSION_GRANTED) {

mPermissionList.add(mCustomPermissionArray[i]);

isCustomPermissionOk = false;

}

}

return isCustomPermissionOk;

}

/**

  • 获取自定义权限

  • @param customPermissionArray 自定义权限数组

*/

public void getCustomPermission(Activity activity, String[] customPermissionArray) {

checkCustomPermission(activity, customPermissionArray);

if (mPermissionList.isEmpty()) {

//未授予的权限为空,表示都授予了

} else {

//请求权限方法

String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组

ActivityCompat.requestPermissions(activity, permissions, REQUEST_CODE_CUSTOM);

}

}

/**

  • 获取自定义权限

  • @param customPermissionArray 自定义权限数组

*/

public void getCustomPermission(Fragment fragment, String[] customPermissionArray) {

checkCustomPermission(fragment.getContext(), customPermissionArray);

if (mPermissionList.isEmpty()) {

//未授予的权限为空,表示都授予了

} else {

//请求权限方法

String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组

fragment.requestPermissions(permissions, REQUEST_CODE_CUSTOM);

}

}

/**

  • 检查日历权限

  • @return true已获取日历权限,false未获取日历权限

*/

public boolean checkCalendarPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CALENDAR);

if (permission != PackageManager.PERMISSION_GRANTED) {

isCalendarPermissionOk = false;

} else {

isCalendarPermissionOk = true;

}

return isCalendarPermissionOk;

}

/**

  • 获取日历权限-拒绝权限后仍然弹出权限窗

*/

public void getCalendarPermission1(Activity activity) {

if (!checkCalendarPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);

}

}

/**

  • 获取日历权限-拒绝权限后仍然弹出权限窗

*/

public void getCalendarPermission1(Fragment fragment) {

if (!checkCalendarPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);

}

}

/**

  • 获取日历权限-拒绝权限后不再弹出权限窗

  • shouldShowRequestPermissionRationale方法,如果用户已经拒绝过则返回true,即不再弹出权限窗

*/

public void getCalendarPermission2(Activity activity) {

// Should we show an explanation?

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CALENDAR)) {

// Show an expanation to the user asynchronously – don’t block

// this thread waiting for the user’s response! After the user

// sees the explanation, try again to request the permission.

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an

// app-defined int constant. The callback method gets the

// result of the request.

}

}

/**

  • 获取日历权限-拒绝权限后不再弹出权限窗

  • shouldShowRequestPermissionRationale方法,如果用户已经拒绝过则返回true,即不再弹出权限窗

*/

public void getCalendarPermission2(Fragment fragment) {

// Should we show an explanation?

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CALENDAR)) {

// Show an expanation to the user asynchronously – don’t block

// this thread waiting for the user’s response! After the user

// sees the explanation, try again to request the permission.

} else {

// No explanation needed, we can request the permission.

fragment.requestPermissions(new String[]{PERMISSION_CALENDAR}, REQUEST_CODE_CALENDAR);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an

// app-defined int constant. The callback method gets the

// result of the request.

}

}

/**

  • 检查摄像头权限

  • @return true已获取摄像头权限,false未获取摄像头权限

*/

public boolean checkCameraPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CAMERA);

if (permission != PackageManager.PERMISSION_GRANTED) {

isCameraPermissionOk = false;

} else {

isCameraPermissionOk = true;

}

return isCameraPermissionOk;

}

/**

  • 获取摄像头权限-拒绝权限后仍然弹出权限窗

*/

public void getCameraPermission1(Activity activity) {

if (!checkCameraPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);

}

}

/**

  • 获取摄像头权限-拒绝权限后仍然弹出权限窗

*/

public void getCameraPermission1(Fragment fragment) {

if (!checkCameraPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);

}

}

/**

  • 获取摄像头权限-拒绝权限后不再弹出权限窗

*/

public void getCameraPermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CAMERA)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);

}

}

/**

  • 获取摄像头权限-拒绝权限后不再弹出权限窗

*/

public void getCameraPermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CAMERA)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_CAMERA}, REQUEST_CODE_CAMERA);

}

}

/**

  • 检查联系人权限

  • @return true已获取联系人权限,false未获取联系人权限

*/

public boolean checkContactsPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_CONTACTS);

if (permission != PackageManager.PERMISSION_GRANTED) {

isContactsPermissionOk = false;

} else {

isContactsPermissionOk = true;

}

return isContactsPermissionOk;

}

/**

  • 获取联系人权限-拒绝权限后仍然弹出权限窗

*/

public void getContactsPermission1(Activity activity) {

if (!checkContactsPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);

}

}

/**

  • 获取联系人权限-拒绝权限后仍然弹出权限窗

*/

public void getContactsPermission1(Fragment fragment) {

if (!checkContactsPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);

}

}

/**

  • 获取联系人权限-拒绝权限后不再弹出权限窗

*/

public void getContactsPermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_CONTACTS)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);

}

}

/**

  • 获取联系人权限-拒绝权限后不再弹出权限窗

*/

public void getContactsPermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_CONTACTS)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_CONTACTS}, REQUEST_CODE_CONTACTS);

}

}

/**

  • 检查定位权限

  • @return true已获取定位权限,false未获取定位权限

*/

public boolean checkLocationPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_LOCATION);

if (permission != PackageManager.PERMISSION_GRANTED) {

isLocationPermissionOk = false;

} else {

isLocationPermissionOk = true;

}

return isLocationPermissionOk;

}

/**

  • 获取定位权限-拒绝权限后仍然弹出权限窗

*/

public void getLocationPermission1(Activity activity) {

if (!checkLocationPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);

}

}

/**

  • 获取定位权限-拒绝权限后仍然弹出权限窗

*/

public void getLocationPermission1(Fragment fragment) {

if (!checkLocationPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);

}

}

/**

  • 获取定位权限-拒绝权限后不再弹出权限窗

*/

public void getLocationPermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_LOCATION)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);

}

}

/**

  • 获取定位权限-拒绝权限后不再弹出权限窗

*/

public void getLocationPermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_LOCATION)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_LOCATION}, REQUEST_CODE_LOCATION);

}

}

/**

  • 检查麦克风权限

  • @return true已获取麦克风权限,false未获取麦克风权限

*/

public boolean checkMicrophonePermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_MICROPHONE);

if (permission != PackageManager.PERMISSION_GRANTED) {

isMicrophonePermissionOk = false;

} else {

isMicrophonePermissionOk = true;

}

return isMicrophonePermissionOk;

}

/**

  • 获取麦克风权限-拒绝权限后仍然弹出权限窗

*/

public void getMicrophonePermission1(Activity activity) {

if (!checkMicrophonePermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);

}

}

/**

  • 获取麦克风权限-拒绝权限后仍然弹出权限窗

*/

public void getMicrophonePermission1(Fragment fragment) {

if (!checkMicrophonePermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);

}

}

/**

  • 获取麦克风权限-拒绝权限后不再弹出权限窗

*/

public void getMicrophonePermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_MICROPHONE)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);

}

}

/**

  • 获取麦克风权限-拒绝权限后不再弹出权限窗

*/

public void getMicrophonePermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_MICROPHONE)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_MICROPHONE}, REQUEST_CODE_MICROPHONE);

}

}

/**

  • 检查手机状态权限

  • @return true已获取手机状态权限,false未获取手机状态权限

*/

public boolean checkPhonePermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_PHONE);

if (permission != PackageManager.PERMISSION_GRANTED) {

isPhonePermissionOk = false;

} else {

isPhonePermissionOk = true;

}

return isPhonePermissionOk;

}

/**

  • 获取手机状态权限-拒绝权限后仍然弹出权限窗

*/

public void getPhonePermission1(Activity activity) {

if (!checkPhonePermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);

}

}

/**

  • 获取手机状态权限-拒绝权限后仍然弹出权限窗

*/

public void getPhonePermission1(Fragment fragment) {

if (!checkPhonePermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);

}

}

/**

  • 获取手机状态权限-拒绝权限后不再弹出权限窗

*/

public void getPhonePermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_PHONE)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);

}

}

/**

  • 获取手机状态权限-拒绝权限后不再弹出权限窗

*/

public void getPhonePermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_PHONE)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_PHONE}, REQUEST_CODE_PHONE);

}

}

/**

  • 检查传感器权限

  • @return true已获取传感器权限,false未获取传感器权限

*/

public boolean checkSensorsPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_SENSORS);

if (permission != PackageManager.PERMISSION_GRANTED) {

isSensorsPermissionOk = false;

} else {

isSensorsPermissionOk = true;

}

return isSensorsPermissionOk;

}

/**

  • 获取传感器权限-拒绝权限后仍然弹出权限窗

*/

public void getSensorsPermission1(Activity activity) {

if (!checkSensorsPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);

}

}

/**

  • 获取传感器权限-拒绝权限后仍然弹出权限窗

*/

public void getSensorsPermission1(Fragment fragment) {

if (!checkSensorsPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);

}

}

/**

  • 获取传感器权限-拒绝权限后不再弹出权限窗

*/

public void getSensorsPermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_SENSORS)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);

}

}

/**

  • 获取传感器权限-拒绝权限后不再弹出权限窗

*/

public void getSensorsPermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_SENSORS)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_SENSORS}, REQUEST_CODE_SENSORS);

}

}

/**

  • 检查短信权限

  • @return true已获取短信权限,false未获取短信权限

*/

public boolean checkSmsPermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_SMS);

if (permission != PackageManager.PERMISSION_GRANTED) {

isSmsPermissionOk = false;

} else {

isSmsPermissionOk = true;

}

return isSmsPermissionOk;

}

/**

  • 获取短信权限-拒绝权限后仍然弹出权限窗

*/

public void getSmsPermission1(Activity activity) {

if (!checkSmsPermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);

}

}

/**

  • 获取短信权限-拒绝权限后仍然弹出权限窗

*/

public void getSmsPermission1(Fragment fragment) {

if (!checkSmsPermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);

}

}

/**

  • 获取短信权限-拒绝权限后不再弹出权限窗

*/

public void getSmsPermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_SMS)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);

}

}

/**

  • 获取短信权限-拒绝权限后不再弹出权限窗

*/

public void getSmsPermission2(Fragment fragment) {

if (fragment.shouldShowRequestPermissionRationale(PERMISSION_SMS)) {

} else {

fragment.requestPermissions(new String[]{PERMISSION_SMS}, REQUEST_CODE_SMS);

}

}

/**

  • 检查存储权限

  • @return true已获取存储权限,false未获取存储权限

*/

public boolean checkStoragePermission(Context context) {

int permission = ContextCompat.checkSelfPermission(context, PERMISSION_STORAGE);

if (permission != PackageManager.PERMISSION_GRANTED) {

isStoragePermissionOk = false;

} else {

isStoragePermissionOk = true;

}

return isStoragePermissionOk;

}

/**

  • 获取存储权限-拒绝权限后仍然弹出权限窗

*/

public void getStoragePermission1(Activity activity) {

if (!checkStoragePermission(activity)) {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);

}

}

/**

  • 获取存储权限-拒绝权限后仍然弹出权限窗

*/

public void getStoragePermission1(Fragment fragment) {

if (!checkStoragePermission(fragment.getContext())) {

fragment.requestPermissions(new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);

}

}

/**

  • 获取存储权限-拒绝权限后不再弹出权限窗

*/

public void getStoragePermission2(Activity activity) {

if (ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSION_STORAGE)) {

} else {

ActivityCompat.requestPermissions(activity, new String[]{PERMISSION_STORAGE}, REQUEST_CODE_STORAGE);

}

}

/**

  • 获取存储权限-拒绝权限后不再弹出权限窗

*/

public void getStoragePermission2(Fragment fragment) {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-4kqQX4wv-1713709721588)]

[外链图片转存中…(img-N3yKwuKQ-1713709721590)]

[外链图片转存中…(img-iFYUoGkP-1713709721591)]

[外链图片转存中…(img-8tT3fSXO-1713709721591)]

[外链图片转存中…(img-fG6HsZOX-1713709721592)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

[外链图片转存中…(img-7UDYvFoY-1713709721593)]

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

[外链图片转存中…(img-SPkJuO7T-1713709721593)]

[外链图片转存中…(img-guqNba4c-1713709721594)]

[外链图片转存中…(img-8PHWmNrA-1713709721595)]

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值