zoukankan      html  css  js  c++  java
  • Marshmallow权限使用

    Google发布Android 6.0后对用权限的控制更加严格,在Android5.1或更低的版本中用户能在App的安装期间或使用设置应用程序权限来同意或拒绝某个权限,而在Android6.0或更高的版本中除了可以向上面说明的那样处理权限还可以在App任意运行期间请求权限。

    Android权限

    Android将权限分为normal和dangerous两类。

    Normal权限

    简单的来说这个这个级别的权限只会对用户的隐私和设备造成很小的影响如INTERNET、ACCESS_NETWORK_STATE等权限。如果你在Manifest中声明多个Normal权限,Android会在App安装期间自动的通过这些Normal权限请求,Android不会提示用户Normal权限且用户不能移除那些权限。

    Dangerous权限

    如果App需要的数据或资源涉及到用户的私有数据如READ_CONTACTS、READ_SMS等权限。Dangerous权限需要用户显示的同意。

    检查权限

    在Android6.0或更高的系统中权限的处理可以在任何APP运行期间,Android已经提供的兼容库并包含一系列的方法去处理权限。注意权限还是要在Manifest中声明的。

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

    以上声明APP需要读SMS权限,在APP安装后Android6.0或更高的版本中这些权限可能默认都是不允许的。为兼容新的Andorid系统应该在读和发送SMS时先检查是否有READ_SMS权限。

        int isGranted = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_SMS);
        if(PackageManager.PERMISSION_GRANTED == isGranted){
                readSms();
        }
    

    以上代码检查是否有READ_SMS权限,如果有则读取短信。

    请求权限

    当通过上面的checkSelfPermission方法返回PackageManager.PERMISSION_DENIED 表示当前还没有READ_SMS权限需要去手动请求权限。

     final int   READ_SMS_PERMISSION = 0x1;
        public void requestSmsPermission(View view){
    
            final String[] permissions = new String[]{
                    android.Manifest.permission.READ_SMS,
            };
    
    
             ActivityCompat.requestPermissions(this, permissions, READ_SMS_PERMISSION);
    
        }
    

    调用requestPermissions方法系统会弹出Dialog询问用户是否同意该权限。

    处理权限响应

    用户对APP权限的请求做出响应后,系统会调用Activity的onRequestPermissionsResult方法。

        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
            if(requestCode == READ_SMS_PERMISSION && grantResults[0] ==  PackageManager.PERMISSION_GRANTED)
                readSms();
        }
    

    参考

    Normal权限列表

    权限组

    Permissions Best Practices




    《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。

  • 相关阅读:
    Creating a Simple Direct2D Application
    关于ssh加密方式的理解
    关于2147217913 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界 的问题解决方法
    关于 win2003中ASP.Net 的edit configuration 无法使用的答疑
    vc 用ado访问Oracle数据库的代码示例
    手工移除vs6的VSS绑定
    关于:无法执行值从 char 到 char 的隐性转换,因为该值的排序规则因排序规则冲突而未能解决
    vs2003 无法进行调试的经历
    关于如何在VMware上安装Puppy Linux
    VB: DataGrid 的列可见问题
  • 原文地址:https://www.cnblogs.com/xwgblog/p/5204673.html
Copyright © 2011-2022 走看看