Android 之System Permission


每一個應用都運行在本身的砂箱中,而且具備不一樣的UserId和進程。android

  1. 簽名
    每一個開發者都具備本身的私有簽名key,
  2. User IDs and File Access
    因爲每一個應用都具備本身的UserID和進程號,所以其打開的文件也都只能本身訪問。若須要兩個app共享文件,那麼須要兩個app設置shareUserId而且使用相同的簽名。
  3. 使用權限
    uses-permission,聲明在Manifest中
xml<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.myapp" >
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    ...
</manifest>
  1. 聲明和強制權限
    自定義本身的權限,須要在Manifest中使用<permission>tag首先聲明。如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.me.app.myapp" >
    <permission android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY"
        android:label="@string/permlab_deadlyActivity"
        android:description="@string/permdesc_deadlyActivity"
        android:permissionGroup="android.permission-group.COST_MONEY"
        android:protectionLevel="dangerous" />
    ...
</manifest>

其中description是對該權限的解釋,將在用戶安裝App時顯示。permissionGroup是表示該權限所屬組,如本例中的消費金錢。protectionLevel是方便Android在安裝時以何種方式通知用戶,本例爲危險,由於須要花錢。
可使用Settings App查看個App的應用權限,或者使用cmd
adb shell pm list permissions -sshell

  1. Manifest中的強制Permission
    對四大組件都可以在其tag中設定權限,若是某個調用者無權限調用該組件,將會獲得 SecurityException的異常。其中ContentProvider具備寫入權限和讀取權限兩種。
  2. URIs Permission
    對於某些應用而言,其數據比較私密,對於不具有權限的App根本沒法讀取或者寫入。如Email中的圖片,當調用其餘App來顯示該圖片時,因爲不具有讀取權限,於是報異常。所以呢,Android引入了URI權限,即在發送Intent時,附帶 Intent.FLAG_GRANT_READ_URI_PERMISSION 和或者Intent.FLAG_GRANT_WRITE_URI_PERMISSION
相關文章
相關標籤/搜索