环境:

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. soa 和微服务的区别

    soa beased applications are compromised of more loosely coupled componets that use an enterprise ser ...

  2. es curl 访问

    1. curl -u elastic:mypass -X GET "localhost:9200/my_index/_search?pretty" 相关链接:https://www ...

  3. 为sqlserver数据库添加专用用户名

    在安全里面右键添加登录名,输入登录名与密码(可以取消强制密码策略)然后选择用户映射的数据库,勾选db_owner即可.

  4. 记第一次XSS实战

    前两天偶然挖到一个XSS,在我低谷期的时候给了我些动力,遂写下这篇博客记录 随手在一个搜索框中测试,发现有反应 观察一下标签,需要">把前面的闭合,然后<a 把后面的标签闭合 结 ...

  5. poj2777(线段树)

    题目链接:https://vjudge.net/problem/POJ-2777 题意:有L块连续的板子,每块板子最多染一种颜色,有T种(<=30)颜色,刚开始将所有板子染成颜色1,O次操作(包 ...

  6. C++——Vector

    #include "opencv2/objdetect.hpp" #include "opencv2/videoio.hpp" #include "o ...

  7. c#: TextBox添加水印效果(PlaceHolderText)

    基于他人代码修改,不闪,以做备忘. 与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深 //与Sen ...

  8. django xadmin多对多字段过滤(含filter的反向查询)

    要实现的功能: 继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能. 功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前 程序会将所有用户都显示出 ...

  9. 两个Integer比较

    两个Integer类型比较不能使用==,要使用equals,   == 在-127~128是可以用的,超出这个范围就不行 public static void main(String[] args) ...

  10. python中的继承和多态

    继承 继承的表现方式: class Animal(): pass class Cat(Animal): #animal是cat的父类,也可以说是基类 pass print(Cat.__bases__) ...