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

来源:互联网 发布:公交数据接口 编辑:程序博客网 时间:2024/06/08 18:23

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的应用发出的广播@Nullablepublic abstract Intent registerReceiver(BroadcastReceiver receiver,        IntentFilter filter, @Nullable String broadcastPermission,        @Nullable Handler scheduler);.............

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

0 0