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="https://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="https://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端添加個使用權限即可。

發佈留言