当前位置:   article > 正文

Android权限描述_安卓权限请求时添加描述

安卓权限请求时添加描述

问题

我们常常在写apk的时候申请一些相关权限。想知道每个权限的作用,可以查询权限声明的地方。

1、三方页面:

https://manifestdestiny.reveb.la/

2、源码注释

/frameworks/base/core/res/AndroidManifest.xml

    <!-- @SystemApi @TestApi Allows an application to write to internal media storage
         @deprecated This permission is no longer honored in the system and no longer adds
         the media_rw gid as a supplementary gid to the holder. Use the
         android.permission.MANAGE_EXTERNAL_STORAGE instead.
         @hide  -->
    <permission android:name="android.permission.WRITE_MEDIA_STORAGE"
        android:protectionLevel="signature|privileged" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3、自定义权限

某些应用会自定义权限,定义权限时可以添加说明。
比如launcher中自定义的权限。

    <permission
        android:name="${packageName}.permission.READ_SETTINGS"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signatureOrSystem"
        android:label="@string/permlab_read_settings"
        android:description="@string/permdesc_read_settings"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
如果权限没有description也没有注释,那就比较坑了。只能祈祷权限名字可以看出来大概是什么东西。

所幸,源码中权限的声明、注释还是比较全的。

4、自定义权限、权限的使用

源码中的权限声明在这里/frameworks/base/core/res/AndroidManifest.xml
使用在所有源码应用中。有一套完整的权限检测。

apk也可以自己声明权限,对访问自己的外部请求做一些限制。

5、demo

appA

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <uses-permission android:name="android.permission.INTERNET"/>
    //声明权限
    //等级标记为危险权限,需要动态申请
    <permission android:name="com.example.myapplication.MainActivity"
        android:icon="@drawable/ic_icon_mouse_37"
        android:label="@string/my_permission"
        android:description="@string/my_permission_description"
        android:protectionLevel="dangerous"
        />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:requiredForAllUsers="false"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:excludeFromRecents="true"
            android:permission="com.example.myapplication.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

appB

//注册权限
<uses-permission android:name="com.example.myapplication.MainActivity"/>

//button单击事件
        button.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("NewApi")
            @Override
            public void onClick(View view) {
            //判断权限,有权限的话直接打开appA
            //没有权限则动态申请权限
                if (checkCallingOrSelfPermission("com.example.myapplication.MainActivity") == PackageManager.PERMISSION_GRANTED){
                    Intent intent = new Intent();
                    intent.setClassName("com.example.myapplication","com.example.myapplication.MainActivity");
                    startActivity(intent);
                }else{
                    requestPermissions(new String[]{"com.example.myapplication.MainActivity"},1001);
                }
            }
        });
//权限同意和拒绝弹提示框
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1001 && "com.example.myapplication.MainActivity".equals(permissions[0])){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(this,"权限申请成功",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(this,"权限申请失败",Toast.LENGTH_SHORT).show();
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/750724
推荐阅读
相关标签
  

闽ICP备14008679号