uses-permission是AndroidManifest.xml中最經常使用的一項配置,它用來聲明一個app在運行時所須要的權限。這裏聲 明的權限在應用安裝時會提醒用戶,用戶能夠選擇贊成安裝或拒絕安裝。在Android6.0以前,若是用戶贊成安裝,即表示贊成app使用在 AndroidManifest.xml中聲明的全部權限,在Android6.0以後,將應用的權限分紅了兩類,一類是Normal permissions, 一類是Dangerous permissions。對AndroidManifest.xml中聲明的Normal permissions,和以前版本同樣,用戶贊成安裝應用就會被授予這些權限。對AndroidManifest.xml中聲明的Dangerous permissions,只表示應用須要用到這些權限,用戶贊成安裝並不會自動授予這類權限,當應用運行時用到這些權限時,須要在代碼中申請權限,只有用 戶贊成了,纔會被授予。用戶贊成後也能夠隨時在系統設置中取消對這類權限的受權。html
<uses-permission android:name="string" android:maxSdkVersion="integer" />
<manifest>
Android:name
須要使用的權限的名字,能夠是系統自帶的權限,也能夠是自定義的權限。Android系統提供了100多個權限,能夠經過 https://developer.android.com/reference/android/Manifest.permission.html 查看這些權限的名字和含義。這些權限大多數名字都是以android.permission.爲前綴,但也有一小部分是com.android.爲前綴,須要注意區分。android
android:maxSdkVersion
表示須要此項權限的最高的系統API Levle,例如設置android:maxSdkVersion爲21,它表示這項權限只在API Level 21(Android5.0)及如下的系統中須要使用。對API Level21以上的系統中不須要使用這項權限。瀏覽器
比較常見的一項和android:maxSdkVersion屬性一塊兒使用的是權限是 android.permission.WRITE_EXTERNAL_STORAGE。當一個app安裝到系統後,Android系統會爲其分配一塊外 部存儲空間供其使用(在應用中經過getExternalFilesDir()和getExternalCacheDir()得到),在Android 4.4 (API level 19)以前的系統中,要向這部分存儲空間中寫入文件,須要獲取android.permission.WRITE_EXTERNAL_STORAGE權 限,可是從Android 4.4開始,對這部分存儲空間的讀寫已經不須要任何權限了。因此,若是不須要讀取這部分存儲空間以外的其餘外部存儲文件,能夠在 AndroidManifest.xml中這樣來聲明這個權限。app
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
注意:
1. uses-permission中並無android:minSdkVersion這樣的配置屬性。
2. 在同一個AndroidManifest.xml中,容許有重複的uses-permission配置,也就是說容許android:name和 android:maxSdkVersion都相同的配置。可是不容許android:name相同,android:maxSdkVersion不一樣的 配置。
例如,以下配置是容許的。google
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
以下配置則是不容許的spa
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="19" />
部分uses-permission的權限聲明會影響應用市場的軟件分發策略。例如一個應用在uses-permission中聲明瞭CAMERA 權限,這意味着該應用須要使用攝像頭才能夠正常工做。若是一個設備上沒有攝像頭,那麼當用戶在該設備上經過 Google Play搜索或瀏覽應用時,就不會找到此應用。若是一個應用雖然須要用到攝像頭,但並不是是必須的,沒有攝像頭大部分功能也能正常工做,那麼就須要在 AndroidManifest.xml中添加CAMERA權限的同時,添加<uses-feature>聲明。
有關Google Play的篩選策略參見 https://developer.android.com/google/play/filters.html.net
app提交到各個應用市場後都會先通過一個審覈的流程,只有審覈經過的應用才能夠發佈。uses-permission聲明的權限會影響應用是否能 夠經過審覈。不一樣應用市場的審覈標準不同,通常國內應用市場對應用權限的審覈條件比較寬鬆,讀取和修改通信錄,收發短信,獲取GPS位置信息,啓用攝像 頭這些權限在國內市場發佈的應用中隨處可見。而Google Play對應用權限的審覈則很是嚴格, 任何超出應用自身功能範圍的權限申請都沒法經過。若是確實須要某項權限,能夠提交必須使用該權限的說明,例如一個瀏覽器須要啓用攝像頭,一個輸入法須要讀 取通信錄,這類權限申請必需要有充分合理的理由纔可以審覈經過。而包含像SYSTEM_ALERT_WINDOW,READ_LOGS這類系統級權限的應 用基本上沒有可能經過Google Play的審覈。因此國內APP在發佈到Google Play以前須要去掉AndroidManifest全部沒必要要的權限聲明和相應的調用代碼。code