当前位置:操作系统 > 安卓/Android >>

Android permission用法

一、前言
        通常,我们开发的应用,只需要使用一些系统定义好的资源,比如网络访问,外部文件读写,WIFI,SMS等监听权限,这些都只需要在AndroidManifest.xml中添加<user-permission>XXXXXX</user-permission>即可,但是,AndroidManifest.xml还有一个叫<permission>的tag,大家有考虑过该用法么?
 
二、授权与使用
        其实,系统的那个权限,就是用的<permission>来定义好的,那么,谁要想使用,只需要对应的添加<user-permission>即可。
      
 
[html] 
<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:
 
[html] 
<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:
 
[html] 
<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" />  
         
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,