环境:

android版本6.0

对应SDK版本23

动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明

步骤

1、新建一个android工程

默认创建即可

2、AndroidManifest.xml 添加权限

这里以android.permission.READ_CONTACTS为例:

<uses-permission android:name="android.permission.READ_CONTACTS"/>

3、MainActivity

package com.xxx.xxx;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast; public class MainActivity extends Activity { private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查是否有权限
if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { if (shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)) {
// 向用户说明为什么需要该权限的提示
Toast.makeText(this, "Apply Reason:申请原因。。。", Toast.LENGTH_LONG).show();
} // 请求权限,系统会显示一个获取权限的提示对话框,当前应用不能配置和修改这个对话框
requestPermissions(new String[] { Manifest.permission.READ_CONTACTS },
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
return;
}
} @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 申请成功
Toast.makeText(this, "Apply Perssion Successfully", Toast.LENGTH_SHORT).show();
} else {
// 申请失败
Toast.makeText(this, "Apply Perssion Failed", Toast.LENGTH_SHORT).show();
// 当用户选择拒绝并勾选记住选择存在问题
// 1、不重新申请的话,会永远获取不到权限
// 2、此处代码,重新申请会陷入死循环,一直提示申请失败,需要调整处理方式
}
return;
}
}
}
}

说明:sdk版本低于23时,权限使用方法与此不同(需要导入android-support-v4.jar),如:

ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)

ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)

下载地址:http://www.pc0359.cn/downinfo/62688.html

将supportlibraryere\support\v7\appcompat\libs下的lib包引用工程。

android:动态申请权限(一)的更多相关文章

  1. Android 动态申请权限问题【转】

    Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...

  2. Android 动态申请权限

    AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...

  3. Android之动态申请权限(API23以上需求)

    API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全. 这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写 ...

  4. Android无需申请权限拨打电话

    Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data ...

  5. 说说Android6.0动态申请权限的那些坑

    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...

  6. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

    Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...

  7. Android动态获取权限

    android权限的变化 在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的.然而这往往会造成一些安全的问题. Google的解决办法: 将Android中的 ...

  8. flutter 动态申请权限

    https://pub.flutter-io.cn/packages/permission_handler https://www.jianshu.com/p/fa68876fbdfd 例 Futur ...

  9. Android6.0动态申请权限

    先直接看代码: public void onClick(View v){ onCallPermission(); } public void onCallPermission(){ if (Build ...

随机推荐

  1. 使用 Spring Data 进行 MongoDB 4.0 事务处理

    使用 Spring Data 进行 MongoDB 4.0 事务处理 原文链接:http://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transa ...

  2. h5-上传图片预览

    <div class="content_sq" style="position:relative;"> <img src="imag ...

  3. About Feature Scaling and Normalization

    在进行数据处理之前,一定要想一想,你的算法是用来做什么,这样才能选择如何对数据进行预处理. 参考网站: http://sebastianraschka.com/Articles/2014_about_ ...

  4. jqgrid点击搜索无法重置参数问题

    var searchClick=false;//判断是否是第一次点击搜索 //当搜索按钮被单击时触发 function searchData(){ //创建jqGrid组件 console.log(' ...

  5. 有关Lambda的一些思考

    问题: What do lambda expressions do? Can we write all functions as lambda expressions? In what cases a ...

  6. linux-kernel-4.4 移植 (3) 网卡移植

    开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...

  7. 前端面试之vue相关的面试题

    hello,你们的小可爱,皮皮聪又来发表感想了. 首先简单概括下会遇到的问题: 1.vuex作用 ①vuex是一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化. ②vue中的多个组件之间 ...

  8. MySQL设置global变量和session变量

    1.在MySQL中要修改全局(global)变量,有两种方法: 方法一,修改my.ini配置文件,如果要设置全局变量最简单的方式是在my.ini文件中直接写入变量配置,如下图所示.重启数据库服务就可以 ...

  9. ajax 与jsp servlet

    jQuery的Ajax实现异步传输List.Map_GOOD 分类: JAVA WEB前端2013-08-29 18:35 6296人阅读 评论(0) 收藏 举报 javajquerylistjson ...

  10. bind()方法

    当点击鼠标时,隐藏或显示 p 元素: $("button").bind("click",function(){ $("p").slideTo ...