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" />
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"/>

在这里插入图片描述
如果权限没有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>

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();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值