转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/76032997

Android所有权限:点击跳转
1.需要用户手动赋予的权限( Dangerous Permissions)

所属权限组 权限
日历 READ_CALENDAR
日历 WRITE_CALENDAR
相机 CAMERA
联系人 READ_CONTACTS
联系人 WRITE_CONTACTS
联系人 GET_ACCOUNTS
位置 ACCESS_FINE_LOCATION
位置 ACCESS_COARSE_LOCATION
麦克风 RECORD_AUDIO
电话 READ_PHONE_STATE
电话 CALL_PHONE
电话 READ_CALL_LOG
电话 WRITE_CALL_LOG
电话 ADD_VOICEMAIL
电话 USE_SIP
电话 PROCESS_OUTGOING_CALLS
传感器 BODY_SENSORS
短信 SEND_SMS
短信 RECEIVE_SMS
短信 READ_SMS
短信 RECEIVE_WAP_PUSH
短信 RECEIVE_MMS
存储 READ_EXTERNAL_STORAGE
存储 WRITE_EXTERNAL_STORAGE

来自谷歌API,点击此处跳转
注意:如果应用程序请求在AndroidManifest中列出的危险权限,并且应用程序已经在同一权限组中具有另一个危险权限,系统会立即授予权限,而不会与用户进行任何交互,。例如,如果一个应用程序先前已经请求并被授予READ_CONTACTS权限,然后它请求WRITE_CONTACTS(同属于联系人一组),系统会立即授予该权限,不会再弹出权限授予询问的对话框。

2.动态申请权限的方法:

首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限,以下代码位置不能放错(在application之外):

然后,在java代码中写动态申请权限的逻辑(这是官网的写法)

    public void requestPower() {    //判断是否已经赋予权限        if (ContextCompat.checkSelfPermission(this,                Manifest.permission.上表权限字符)                != PackageManager.PERMISSION_GRANTED) {           //如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。            if (ActivityCompat.shouldShowRequestPermissionRationale(this,                    Manifest.permission.上表权限字符)) {//这里可以写个对话框之类的项向用户解释为什么要申请权限,并在对话框的确认键后续再次申请权限.它在用户选择"不再询问"的情况下返回false            } else {            //申请权限,字符串数组内是一个或多个要申请的权限,1是申请权限结果的返回参数,在onRequestPermissionsResult可以得知申请结果                ActivityCompat.requestPermissions(this,                        new String[]{Manifest.permission.上表权限字符,}, 1);            }        }    }

注意,因为判断语句,其实实际上当用户拒绝一次权限申请后,再次调用方法,不会再出现申请权限对话框。而如果不把权限写在数组里,而是每条权限放在一个多个以下方法里一起调用,实际上,每次一起调用这多个方法,实际只申请这些方法的一条权限。
4.判断权限申请结果的方法

判断权限申请结果的方法(在权限申请对话框消失后执行)(注意:PERMISSION_GRANTED变量,导入的是:
import static android.content.pm.PackageManager.PERMISSION_GRANTED):

 @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == 1) {            for (int i = 0; i < permissions.length; i++) {                if (grantResults[i] == PERMISSION_GRANTED) {                    Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();                } else {                    Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();                }            }        }    }

当系统要求用户授予权限时,用户可以选择指示系统不再要求提供该权限。这种情况下,无论应用在什么时候使用 requestPermissions() 再次要求该权限,系统都会立即拒绝此请求。

5.一个动态申请权限的简单例子(申请内存读写权限):

AndroidManifest.xml中:

java代码,在需要使用权限前调用:

public void requestAllPower() {        if (ContextCompat.checkSelfPermission(this,                Manifest.permission.WRITE_EXTERNAL_STORAGE)                != PackageManager.PERMISSION_GRANTED) {            if (ActivityCompat.shouldShowRequestPermissionRationale(this,                    Manifest.permission.WRITE_EXTERNAL_STORAGE)) {            } else {                ActivityCompat.requestPermissions(this,                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,                                Manifest.permission.READ_EXTERNAL_STORAGE}, 1);            }        }    }

更多相关文章

  1. ROOT android 原则。 基于(zergRush)
  2. Android(安卓)私有文件夹 文件的写入与读取
  3. Android中控制SystemUI 中任务栏的的显示与隐藏
  4. Android6.0 SystemUI之网络信号栏显示刷新
  5. java.lang.Class Cast Exception: android.widget.HeaderViewLis
  6. 优化 Android(安卓)Studio 启动、编译、运行速度的方法
  7. android onSaveInstanceState方法
  8. Android(安卓)简单存储 SharedPreferencesUtils
  9. 浅析Android加载字体包及封装的方法

随机推荐

  1. Android(安卓)应用界面设计
  2. Android(安卓)开发者不得不面对的六个问
  3. android:layout_weight属性的工作原理
  4. Android之SAX解析xml
  5. Android高手进阶教程(三)之----Android(
  6. 开发规范:《阿里巴巴Android开发手册》之
  7. 修改Android开机画面
  8. 如何画好人体动态?动漫人体动态画法教程
  9. RabbitMQ入门 -- 阿里云服务器安装Rabbit
  10. nginx常见502错误提示原因和解决方法