环境:

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. thinkphp 5 _initialize 使用问题

    如果继承的是common的话.控制器的_initialize要先继承父类的_initialize parent::_initialize();

  2. c语言:第二次作业,循环结构

    1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 循环相比分支和顺序结构难了许多,相对的来说我的c语言的基础比之前有提高,但是还是很多题想了很久也 ...

  3. 将.rpm转换为.tar.gz

    安装rpm2targz 下载rpm2targz:rpm2targz 解压 tar xzf rpm2targz-9.0.tar.gz chmod +x rpm2targz 1 2 将rpm2targz添 ...

  4. redis设置密码

    1.初始化Redis密码: 在redis.conf配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数: 比如 requirepass test123: (Ps:需重启 ...

  5. java程序启动redis报错ERR Client sent AUTH, but no password is set

    配置文件中注释掉password一句 重启程序即可

  6. c#: WebBrowser 禁止在新窗口打开链接

    项目中碰到此需求.几番比对,此为最好的解决方案,聊做备忘. 1.加入Microsoft Internet Controls引用: 项目右键->添加引用->COM->Microsoft ...

  7. spring boot1.0 集成quartz 动态配置定时任务

    转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...

  8. setTimeout与Promise的区别

    1,4,3,2 Promise是一个micro task  主线程是一个task  micro task queue会在task后面执行 setTimeout返回的函数是一个新的task macro ...

  9. php中使用sphinx搜索引擎

    sphinx是一个高效的搜索引擎,分词搜索的速度比较快,索引建立存储在硬盘文件,不会干扰数据库,有自己内置的一套数据库. 一. 安装.配置 1.ubuntu安装sphinx 如果没有安装aptitud ...

  10. 11.Redis缓存设计

    11.Redis缓存设计11.1 缓存的收益和成本11.2 缓存更新策略11.3 缓存粒度控制11.4 穿透优化11.5 无底洞优化11.6 雪崩优化11.7 热点key重建优化11.8 本章重点回顾