Android 應用權限概覽

一、許可權限

一個應用程序必須在程序清單中用 <uses-permission> 標簽來聲明所需的權限 。例如,需要發(fā)送 SMS 消息的應用程序需要在清單中包含以下行:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.snazzyapp">

    <uses-permission android:name="android.permission.SEND_SMS"/>

    <application ...>
        ...
    </application>
</manifest>
  • 如果清單中列出了普通權限(即對用戶的隱私或設備操作不構成風險的權限)突照,系統(tǒng)會自動將這些權限授予你的應用。

  • 如果清單中列出了危險權限(即可能影響用戶隱私權或設備正常操作的權限)氧吐,例如上述 SEND_SMS 權限,則用戶必須明確同意授予這些權限末盔。

1. Request prompts for dangerous permissions — 對于危險權限要求提示

只有危險的權限需要用戶同意授權筑舅。Android 要求用戶授予危險權限的方式取決于用戶設備上運行的 Android 版本以及應用的目標 Android 版本。

1.1 Runtime requests (Android 6.0 and higher) — 運行時請求

如果設備運行的是 Android 6.0(API 級別 23)或更高版本陨舱,并且應用程序的 targetSdkVersion 是 23 或更高翠拣,則安裝時用戶不會收到任何有關權限的通知。應用程序必須要求用戶在運行時授予危險權限游盲。這時误墓,用戶會看到一個系統(tǒng)對話框,該對話框包含拒絕和允許按鈕益缎,如下左圖谜慌。

如果用戶拒絕權限請求,則在應用下次請求權限時莺奔,該對話框?qū)粋€復選框欣范,該復選框在選中后表示用戶不會再次被要求提供權限,如下右圖令哟。

即使用戶授予你所請求的權限恼琼,用戶還是可以選擇在系統(tǒng)設置中逐個啟用和禁用權限。所以你應該始終在運行時檢查并請求權限以防止運行時錯誤(SecurityException)屏富。

1.2 Install-time requests (Android 5.1.1 and below) — 安裝時請求

如果設備的 Android 版本是 Android 5.1.1(API 級別 22)或更低晴竞,或者該應用的 targetSdkVersion 為 22 或更低,則系統(tǒng)會自動要求用戶在安裝時為應用授予所有危險權限狠半,如下圖噩死。

如果用戶點擊接受,則授予應用請求的所有權限神年。如果用戶拒絕權限請求甜滨,系統(tǒng)將取消應用程序的安裝。

如果應用程序更新包含對額外權限的需求瘤袖,則在更新應用程序之前會提示用戶接受這些新的權限衣摩。

二、Permissions for optional hardware features — 可選硬件功能的權限

訪問某些硬件功能(例如藍牙或相機)需要應用程序許可。但是艾扮,不是所有的 Android 設備都具備這些硬件功能既琴。因此,如果應用程序請求 CAMERA 許可權泡嘴,則必須在清單中用 <uses-feature> 標簽來聲明是否實際需要此功能甫恩。例如:

<uses-feature android:name="android.hardware.camera" android:required="false" />
  • 如果你用 android:required="false" 聲明了該功能,那么 Google Play 可讓你的應用安裝在沒有此功能的設備上酌予。你必須調(diào)用 PackageManager.hasSystemFeature() 來檢查當前設備是否在運行時具有該功能 磺箕,并在不可用時禁用該功能。

  • 如果你不提供 <uses-feature> 標簽抛虫,那么當 Google Play 發(fā)現(xiàn)應用請求相應的權限時松靡,會假定該應用需要此功能。因此建椰,該應用會無法安裝在沒有該功能的設備上雕欺,就像你在 <uses-feature> 標簽中聲明 android:required="true" 一樣 。

三棉姐、自動權限調(diào)整

Android 根據(jù) targetSdkVersion 的值來決定是否需要添加權限屠列。如果該值低于權限被添加的版本,則 Android 會自動添加權限伞矩。

例如笛洛,READ_EXTERNAL_STORAGE 權限從 API 級別 19 開始強制要求,以限制對共享存儲空間的訪問乃坤。如果 targetSdkVersion 是 18 或更低版本撞蜂,則會在新版 Android 上將此權限添加到應用中。

注意:如果你的應用自動添加了權限侥袜,即使實際上不需要它們蝌诡,Google Play 上的應用列表也會列出這些附加權限。為了避免這種情況并刪除不需要的默認權限枫吧,請將 targetSdkVersion 設置為盡可能高浦旱。

四、權限保護級別

權限分為幾個保護級別九杂,保護級別將影響是否需要在運行時請求權限颁湖。

1. 普通權限

普通權限涵蓋應用程序需要訪問沙箱外的數(shù)據(jù)或資源的區(qū)域,但是對用戶的隱私或其他應用程序的風險很小例隆。例如甥捺,設置時區(qū)的權限是普通權限。

系統(tǒng)會在安裝時自動授予普通權限許可權镀层,不會提示用戶镰禾,并且用戶無法撤消這些權限。

從 Android 8.1(API 級別 27)開始,以下權限分類為 PROTECTION_NORMAL

2. 簽名權限

系統(tǒng)在安裝時授予應用程序這些權限吴侦,但僅當試圖使用權限的應用程序與定義權限的應用程序具有相同的證書簽名時屋休。

注意:某些簽名權限不適用于第三方應用程序。

從 Android 8.1(API 級別 27)開始备韧,第三方應用程序可以使用以下分類為 PROTECTION_SIGNATURE 的權限:

3. 危險權限

危險權限涵蓋應用程序需要涉及用戶私人信息或資源的區(qū)域劫樟,或者可能會影響用戶的存儲數(shù)據(jù)或其他應用程序的操作。例如织堂,閱讀用戶聯(lián)系人的權限是一個危險的權限叠艳。

危險權限和權限組如下圖:

4. 特殊權限

有幾個不屬于普通和危險級別的權限。SYSTEM_ALERT_WINDOWWRITE_SETTINGS 特別敏感易阳,所以大多數(shù)應用程序不應該使用它們附较。如果應用程序需要這些權限之一,則必須在清單中聲明權限闽烙,并請求用戶授權。系統(tǒng)通過向用戶顯示詳細的管理界面來響應請求声搁。

五黑竞、查看應用程序權限

你可以使用 “設置” 應用程序和 shell 命令 adb shell pm list permissions 查看系統(tǒng)中當前定義的所有權限。對于開發(fā)人員疏旨,使用 adb '-s' 選項將在一個表格中顯示權限很魂,類似用戶看到的那樣:

$ adb shell pm list permissions -s
All Permissions:

Network communication: view Wi-Fi state, create Bluetooth connections, full
internet access, view network state

Your location: access extra location provider commands, fine (GPS) location,
mock location sources for testing, coarse (network-based) location

Services that cost you money: send SMS messages, directly call phone numbers

...

在模擬器或測試設備上安裝應用程序時,你還可以使用 adb -g 選項自動授予所有權限:

$ adb shell install -g MyApp.apk
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檐涝,一起剝皮案震驚了整個濱河市遏匆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谁榜,老刑警劉巖幅聘,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窃植,居然都是意外死亡帝蒿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門巷怜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葛超,“玉大人,你說我怎么就攤上這事延塑⌒逭牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵关带,是天一觀的道長侥涵。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么独令? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任端朵,我火速辦了婚禮,結果婚禮上燃箭,老公的妹妹穿的比我還像新娘冲呢。我一直安慰自己,他們只是感情好招狸,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布敬拓。 她就那樣靜靜地躺著,像睡著了一般裙戏。 火紅的嫁衣襯著肌膚如雪乘凸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天累榜,我揣著相機與錄音营勤,去河邊找鬼。 笑死壹罚,一個胖子當著我的面吹牛葛作,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猖凛,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赂蠢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辨泳?” 一聲冷哼從身側響起虱岂,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菠红,沒想到半個月后第岖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡试溯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年绍傲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍共。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡烫饼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出试读,到底是詐尸還是另有隱情杠纵,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茬末。R本人自食惡果不足惜银亲,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一慢叨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧务蝠,春花似錦拍谐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至院喜,卻和暖如春亡蓉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喷舀。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工砍濒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人硫麻。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓爸邢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庶香。 傳聞我的和親對象是個殘疾皇子甲棍,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,290評論 25 707
  • Android系統(tǒng)權限 Android 是一個權限分隔的操作系統(tǒng)简识,其中每個應用都有其獨特的系統(tǒng)標識(Linux 用...
    ZHLeo閱讀 7,443評論 3 16
  • 只是心疼我大中華幾千年文明赶掖,青花瓷、水墨畫七扰、絲綢刺繡等等每一種都美得含蓄又溫婉奢赂。 然而外國人一想到“中國風”還是這...
    藏在心底的風景閱讀 239評論 0 0
  • 刷了第七季第6集后,HBO在我心中的地位那是蹭蹭蹭往上漲啊颈走。太牛掰了膳灶,能制作出這樣蕩氣回腸的史詩般壯麗的影片。不敢...
    最愛山抹微云閱讀 720評論 0 1
  • 不是所有的閱讀方式都合適自己,合適自己的才是最好的锐膜。 帶著問題去讀書毕箍,這也是上次和大家交流后的第一感,相比個人...
    清秀_5153閱讀 158評論 0 0