google官方例子: https://github.com/googlesamples/android-RuntimePermissions

Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测。

以下权限都需要在运行时判断:

身体传感器,日历,摄像头,通讯录,地理位置,麦克风,电话,短信,存储空间

运行时权限处理

Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。

检查并申请权限
我们需要在用到权限的地方,每次都检查是否APP已经拥有权限,比如我们有一个下载功能,需要写SD卡的权限,我们在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
}

请求权限后,系统会弹出请求权限的Dialog

用户选择允许或需要后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult

  @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(requestCode,grantResults);
}

我们接着需要根据requestCode和grantResults(授权结果)做相应的后续处理

private void doNext(int requestCode, int[] grantResults) {
if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
} else {
// Permission Denied
}
}
}

最新文章

  1. 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新
  2. ExecutorService与ThreadPoolTaskExecutor
  3. apache开启.htaccess及.htaccess的使用方法(转)
  4. C语言中qsort函数的应用
  5. ZeroClipboard / jquery.zclip.min.js跨浏览器复制插件使用中遇到的问题解决
  6. [转]15年双11手淘前端技术巡演 - H5性能最佳实践
  7. 在sqlServer中把数据导出为insert脚本
  8. Mobile Web
  9. ajax该什么时候用
  10. 转:Python requests 快速入门
  11. 暑假集训(1)第二弹 -----Catch the cow(Poj3278)
  12. vijosP1059 积木城堡
  13. WinForm中TextBox 中判断扫描枪输入与键盘输入
  14. 【转载】__name__ == "__main__": 你认识我么?
  15. bootstrap快速入门笔记(一)
  16. Assigning Workstations
  17. suds库使用说明官方文档
  18. 与webview打交道踩过的坑
  19. 利用SHAPEIT将vcf文件进行基因型(genotype)定相(phasing):查看两个突变是否来源于同一条链(染色体或父本或母本),two mutations carried by the same read
  20. grid - 显式网格

热门文章

  1. 20145223 《Java程序程序设计》实验报告4
  2. js-Ajax与Comet
  3. 泛型容器单元(Generics.Collections)[3]: TStack<T> 堆栈列表
  4. Silverlight
  5. linux查看和修改当前系统时间
  6. oracle 函数大全及运算符
  7. 《深入浅出Windows Phone 8.1 应用开发》基于Runtime框架全新升级版
  8. 【POJ】2151 Check the difficulty of problems
  9. ArcGIS几种数据格式
  10. 用GruntJS合并、压缩CSS资源文件