环境:

android版本6.0

对应SDK版本23

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

步骤

1、新建一个android工程

默认创建即可

2、AndroidManifest.xml 添加权限

这里以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包引用工程。

 

更多相关文章

  1. android中gps的使用以及解析nmea0183协议
  2. Android应用默认权限开启
  3. android问题(1)
  4. android判断应用是否有某个权限
  5. android中的提示信息显示方法(toast应用)
  6. Android属性(property)机制
  7. android 驱动文件权限设置
  8. Android(安卓)判断通知栏权限的问题
  9. 利用drozer进行Android渗透测试

随机推荐

  1. js的自定义dataset对象 ,js操作css, js中
  2. 如何让PHP的代码更安全
  3. Opencv创建车牌图片识别系统方法详解
  4. 解析PHP观察者模式Observer
  5. php去掉一维数组的键值的实例方法
  6. Java11中基于嵌套关系的访问控制优化详解
  7. Flutter构建自定义Widgets的全过程记录
  8. JS对象-JSON转换,XHR 实例演示,Fetch API
  9. PHP中国际化的字符串排序和比较对象详解
  10. 板绘动漫人物怎么上色?板绘肤色上色技巧