Android应用中定义权限的基本方法

1、定义和声明定制权限

应用可以在其AndroidManifest.xml中定义自己专属的权限,具体的操作如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="stark.a.is.zhang.photogallery">

    <!--利用permission属性,定义应用专属的权限-->
    <!--protectionLevel定义了该权限的安全级别 -->
    <permission android:name="stark.a.is.zhang.photogallery.Private"
                android:protectionLevel="signature"/>

    .....................
    <!--定义了权限后,以正常的方式使用 -->
    <uses-permission android:name="stark.a.is.zhang.photogallery.Private"/>
............

2、权限的安全级别

自定义权限必须指定android:protectionLevel属性值。
Android系统将根据protectionLevel属性确定自定义权限的使用方式。

目前android定义了四种安全级别:
1、normal
normal用于修饰低风险权限,只要在APK在AndroidManifest.xml中申请了就可以使用。
在APK安装时,可以看到相应的安全级别,但不需要用户确认授权。

2、dangerous
dangerous用于修饰高风险权限,APK使用这类权限时,系统会明确要求用户进行确认。

3、signature
signature安全级别表明,如果其它应用需要使用当前应用自定义的权限,
则必须使用和当前相同的key做签名认证。
对于仅限应用内部使用的权限,选择signature安全级别比较合适。
权限授予时,系统不会通知用户。

4、signatureOrSystem
主要针对系统应用之间的通信。
当在系统应用中,定义该安全级别的权限时,其它系统应用均可以申请该应用的授权。
对于普通应用(非系统),该权限的用途退化到与signature级别一致。


3、使用举例
例如,在应用中定义一个服务。
在AndroidManifest.xml中,指定启动服务必须要有上文定义的定制权限。

............
<service android:name=".service.JobPollService"
            android:permission="stark.a.is.zhang.photogallery.Private"
            android:exported="true"/>
............

此时,其它签名不一致的应用,即使知道了service的包名和类民,也无法利用startService的方式,显示启动该service。

此外,在发送接受广播时,Context中同样定义了如下接口:

..............
//要求广播接受器所在应用,必须有receiverPermission对应的权限
public abstract void sendBroadcast(@RequiresPermission Intent intent,
            @Nullable String receiverPermission);
.............

//注册广播接受器,仅接受持有broadcastPermission的应用发出的广播
@Nullable
public abstract Intent registerReceiver(BroadcastReceiver receiver,
        IntentFilter filter, @Nullable String broadcastPermission,
        @Nullable Handler scheduler);
.............

通过这种方式,可以将广播的发送范围限制在具有相同权限的一组应用中,避免信息的泄露。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值