Android 手动获取判断处理权限

发布时间 - 2026-01-11 00:56:31    点击率:

主要用到的几个方法:

//检查权限
int checkSelfPermission(String)
//申请权限
void requestPermissions(int, String...)
//是否应该显示请求权限的说明
boolean shouldShowRequestPermissionRationale(String)
//处理权限结果回调
void onRequestPermissionsResult(int,String[],int[])

是否有权限常量标识:

PackageManager.PERMISSION_DENIED:拒绝了。

PackageManager.PERMISSION_GRANTED:授权了

上述四个方法中,前三个方法在support-v4的ActivityCompat中都有,建议使用兼容库中的方法。最后一个方法是用户授权或者拒绝某个权限组时系统会回调Activity或者Fragment中的方法。

1. checkSelfPermission(String)

检查权限

1. 检查某一个权限的当前状态,你应该在请求某个权限时检查这个权限是否已经被用户授权,已经授权的权限重复申请可能会让用户产生厌烦。

2. 该方法有一个参数是权限名称,有一个int的返回值,用这个值与上面提到的两个常量做比较可判断检查的权限当前的状态。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {
  // 没有权限,可以在这里重新申请权限。
}else{
  // 有权限了。
}

2. requestPermissions(int, String…)

申请权限

请求用户授权几个权限,调用后系统会显示一个请求用户授权的提示对话框,App不能配置和修改这个对话框,如果需要提示用户这个权限相关的信息或说明,需要在调用 requestPermissions() 之前处理

该方法有两个参数:

int requestCode: 会在回调onRequestPermissionsResult()时返回,用来判断是哪个授权申请的回调。

String[] permissions: 权限数组,你需要申请的的权限的数组。

由于该方法是异步的,所以无返回值,当用户处理完授权操作时,会回调Activity或者Fragment的onRequestPermissionsResult()方法。

ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);

3. onRequestPermissionsResult(int,String[],int[])

处理权限结果回调

1. 该方法在Activity/Fragment中应该被重写,当用户处理完授权操作时,系统会自动回调该方法

2. 该方法有三个参数:

int requestCode: 在调用requestPermissions()时的第一个参数。

String[] permissions: 权限数组,在调用requestPermissions()时的第二个参数。

int[] grantResults: 授权结果数组,对应permissions,具体值和上方提到的PackageManager中的两个常量做比较。

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
  switch (requestCode) {
    case MMM: {
      if (grantResults.length > 0
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // 权限被用户同意,可以做你要做的事情了。
      } else {
        // 权限被用户拒绝了,可以提示用户,关闭界面等等。
      }
      return;
    }
  }
} 

4. shouldShowRequestPermissionRationale(String)

是否应该显示请求权限的说

1.第一次请求权限时,用户拒绝了,调用shouldShowRequestPermissionRationale()后返回true,应该显示一些为什么需要这个权限的说明。

2.用户在第一次拒绝某个权限后,下次再次申请时,授权的dialog中将会出现“不再提醒”选项,一旦选中勾选了,那么下次申请将不会提示用户。

3.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项,调用shouldShowRequestPermissionRationale()后返回false。

4.设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale()返回false 。

5.加这个提醒的好处在于,用户拒绝过一次权限后我们再次申请时可以提醒该权限的重要性,面得再次申请时用户勾选“不再提醒”并决绝,导致下次申请权限直接失败。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 没有权限。
 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
   // 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限。
 } else {
  // 申请授权。
  ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
 }
}
...
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 switch (requestCode) {
  case MMM: {
   if (grantResults.length > 0
    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    // 权限被用户同意。
   } else {
    // 权限被用户拒绝了。
   }
   return;
  }
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# android  # 权限判断  # 判断权限状态  # 获取判断处理权限  # Android 操作系统获取Root权限 原理详细解析  # Android获取ROOT权限的实例代码  # Android权限控制之自定义权限  # Android中Root权限获取的简单代码  # Android需要提升权限的操作方法  # android编程判断应用是否具有某个权限的方法  # Android无需申请权限拨打电话的两种方式  # Android用代码获取手机root之后的最高权限  # 谈谈Android6.0运行时的权限处理  # Android辅助权限的介绍和配置完整记录  # 回调  # 拒绝了  # 几个  # 下次  # 对话框  # 没有权限  # 勾选  # 有一个  # 返回值  # 请求权  # 都有  # 在这里  # 第一个  # 将会  # 的说  # 会在  # 要做  # 第二个  # 会让  # 重写 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在云指建站中生成FTP站点?  C#如何调用原生C++ COM对象详解  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  大型企业网站制作流程,做网站需要注册公司吗?  如何在宝塔面板创建新站点?  如何为不同团队 ID 动态生成多个“认领值班”按钮  高防服务器如何保障网站安全无虞?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在阿里云ECS服务器部署织梦CMS网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何在宝塔面板中修改默认建站目录?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何快速搭建高效可靠的建站解决方案?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  北京的网站制作公司有哪些,哪个视频网站最好?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何使用withoutEvents方法临时禁用模型事件  bootstrap日历插件datetimepicker使用方法  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何在Tomcat中配置并部署网站项目?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何解决hover在ie6中的兼容性问题  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel如何与Inertia.js和Vue/React构建现代单页应用  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  jQuery validate插件功能与用法详解  javascript中闭包概念与用法深入理解  如何快速搭建高效简练网站?  如何在IIS服务器上快速部署高效网站?  如何做网站制作流程,*游戏网站怎么搭建?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何快速选择适合个人网站的云服务器配置?  如何基于PHP生成高效IDC网络公司建站源码?  如何快速搭建个人网站并优化SEO?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  网站图片在线制作软件,怎么在图片上做链接?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】