安卓开发自定义权限以及权限的级别

在android系统的安全模型中,应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。如果应用需要执行某些操作,就需要声明使用这个操作对应的权限。 (在manifest文件中 添加标记)

android 系统提供了一系列这样的权限,具体可以查看android 权限,另外,android系统在新的版本中会增加一些permission,可以查看android 版本信息。

当然,app也可以自定义属于自己的permission 或属于开发者使用的同一个签名的permission。定义一个permission 就是在menifest文件中添加一个permission标签。

<permission android:description="string resource"
           android:icon="drawable resource"
           android:label="string resource"
           android:name="string"
           android:permissionGroup="string"
           android:protectionLevel=["normal" | "dangerous" |"signature" | "signatureOrSystem"] />

1、下面对各参数做一个简单说明

android:description :对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果
android:label: 对权限的一个简短描述
android:name :权限的唯一标识,一般都是使用 报名加权限名
android:permissionGroup: 权限所属权限组的名称
android:protectionLevel: 权限的等级(normal 、dangerous  、signature  、signatureOrSystem  ),
android:name 属性是必须的,其他的可选,未写的系统会指定默认值

2、protectionLevel权限等级的详细说明

(1)Normal
权限被声明为Normal级别,任何应用都可以申请,在安装应用时,不会直接提示给用户,点击全部才会展示。
(2)Dangerous
权限被声明为Dangerous级别,任何应用都可以申请,在安装应用时,会直接提示给用户。
(3)Signature
权限被声明为Signature级别,只有和该apk(定义了这个权限的apk)用相同的私钥签名的应用才可以申请该权限。

frameworks/base/core/res/AndroidManifest.xml声明的权限为Signature级别,那么只有Android官方使用相同私钥签名的应用才可以申请该权限。
(4)SignatureOrSystem
权限被声明为SignatureOrSystem级别,有两种应用可以申请该权限。
1)和该apk(定义了这个权限的apk)用相同的私钥签名的应用
2)在/system/app目录下的应用

3、举个例子
比如百度地图apk的AndroidManifest.xml里面声明了一个权限,
(1)、权限定义为Dangerous,那么任何其他应用都可以使用。
(2)、权限定义为Signature,那么只有使用同样私钥签名的apk,例如百度网盘,可以使用这个权限。
(3)、权限定义为SignatureOrSystem,那么使用同样私钥签名的apk,例如百度网盘,可以使用这个权限。在/system/app下的应用也可以使用这个权限。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓开发中,可以通过广播申请自定义权限。以下是一些基本步骤: 1. 在AndroidManifest.xml文件中添加自定义权限声明: ``` <permission android:name="com.example.custompermission" android:protectionLevel="signature"/> ``` 其中,android:name是自定义权限的名称,android:protectionLevel指定了权限保护级别。 2. 在BroadcastReceiver中发送自定义广播,并附带自定义权限: ``` Intent intent = new Intent("com.example.ACTION_CUSTOM_BROADCAST"); intent.putExtra("message", "Hello, world!"); intent.addPermission("com.example.custompermission"); sendBroadcast(intent); ``` 其中,"com.example.ACTION_CUSTOM_BROADCAST"是自定义广播的名称,"com.example.custompermission"是自定义权限的名称。 3. 在需要使用自定义权限的地方,检查是否拥有该权限: ``` if (ContextCompat.checkSelfPermission(this, "com.example.custompermission") == PackageManager.PERMISSION_GRANTED) { // 执行需要权限的操作 } else { // 申请权限 ActivityCompat.requestPermissions(this, new String[]{"com.example.custompermission"}, 1); } ``` 其中,"this"是当前上下文,"com.example.custompermission"是自定义权限的名称,1是申请权限时的请求码。 4. 在权限申请结果回调中处理申请结果: ``` @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 执行需要权限的操作 } else { // 权限申请被拒绝 } } } ``` 其中,1是申请权限时的请求码,PackageManager.PERMISSION_GRANTED表示权限已授权,PackageManager.PERMISSION_DENIED表示权限被拒绝。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值