Android permission用法

一、前言

        通常,我们开发的应用,只需要使用一些系统定义好的资源,比如网络访问,外部文件读写,WIFI,SMS等监听权限,这些都只需要在AndroidManifest.xml中添加<user-permission>XXXXXX</user-permission>即可,但是,AndroidManifest.xml还有一个叫<permission>的tag,大家有考虑过该用法么?

二、授权与使用

        其实,系统的那个权限,就是用的<permission>来定义好的,那么,谁要想使用,只需要对应的添加<user-permission>即可。

        参考自:《Android-permission-element》       

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

        android:description:  描述这个权限所针对的操作及用户授予这个权限的后果
        android:label:   权限的一个简短描述
        android:name: 权限的唯一标识,一般都是使用 报名加权限名
        android:permissionGroup: 权限所属权限组的名称
        android:protectionLevel: 权限的等级

        normal:
        是最低的等级,声明次权限的app,系统会默认授予次权限,不会提示用户
        dangerous: 
        权限对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户
        signature: 
        权限表明的操作只针对使用同一个证书签名的app开放
        signatureOrSystem: 
        与signature类似,只是增加了rom中自带的app的声明

        注:android:name 属性是必须的,其他的可选,未写的系统会指定默认值

三、用例子说话

        我们举个例子,用Broadcast即广播来为例说明:

        有两个APK,apkA端写了个BroadcastReceiver,用来接收"com.chris.test.ACTION_TEST",在apkB端,写了个发送这个广播的代码,请问:哪端定义权限,哪端使用权限?

        当然是apkA端定义权限,而apkB端使用啦。

        这里只例出apkA和apkB的AndroidManifest.xml就行啦:

        apkA:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.chris.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    <!-- 声明权限 -->
    <permission android:name="com.chris.permission.BROADCAST_PERMISSION" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.chris.test.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		
        <!-- 注册Broadcast Receiver,并指定了给当前Receiver发送消息方需要的权限 -->
        <receiver
            android:name="com.chris.test.MyReceiver"
            android:permission="com.chris.permission.BROADCAST_PERMISSION" >
            <intent-filter>
                <action android:name="com.chris.test.ACTION_TEST" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

        在apkA端声明,并指并BroadcastReceiver发送方的权限;

        apkB:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.chris.test.sender"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    <!-- 声明使用指定的权限 -->
    <uses-permission android:name="com.chris.permission.BROADCAST_PERMISSION" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.chris.test.sender.MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

        在apkB端添加个使用权限即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值