2015-11-05 31 views
4

我很想知道新的Android 6.0 Marshmallow功能,可以讓用戶明確設置應用程序允許哪些權限使用。我的問題是這會如何影響使用權限集的現有應用程序。未更新的應用程序會發生什麼情況,該應用程序執行的代碼需要用戶在Android 6.0中不允許的權限Marshmallow

例如,一個未更新的應用程序[目標sdk版本< 23]已經表明允許使用相機,但用戶手動禁止它。應用程序在執行使用權限的代碼時會發生什麼?它會不會崩潰?

我假設新應用程序在執行代碼之前必須檢查他們是否具有權限 - 我的問題是關於應用程序而不是更改爲處理這些情況。

+0

沒有測試過它,但可能它會拋出一個異常,就像它錯過了在聲明中聲明權限一樣。 – Nanoc

回答

10

我的問題是有關未變更爲處理這些案件

隱含的假設是targetSdkVersion將低於23.任何人誰設置自己的targetSdkVersion 23或更高必須應用更改他們的應用程序以處理運行時權限,否則將永遠無法獲得dangerous權限。

在這種情況下,引用自己從my book

應用具有低於23 targetSdkVersion,在表面上,表現 在Android 6.0+,因爲它們會 一個較舊的設備上:在提示用戶所有權限,並且 應用程序在安裝該應用程序時被授予這些權限。

但是,用戶將仍然可以進入設置和撤消權限從這些應用 ,對於任何權限的應用程序的請求是在 一個運行權限組。

一般情況下,你會忽略這個問題。您撥打 受到用戶撤銷權限保護的方法的所有電話都將「工作」,只要他們將 不拋出SecurityException即可。然而,你只是不會得到任何結果 回來或有預期的效果。因此,舉例來說,如果你試圖query()ContactsContractContentProvider,用戶撤消您的訪問 聯繫相關的權限,該query()會返回一個空 Cursor。這是完全有效的迴應,甚至忽略了許可 問題,因爲用戶完全有可能沒有聯繫人。無論如何,你的應用程序 應該正常處理這些情況。因此,理論上,即使您對丟失的權限沒有做任何特別處理,您的應用程序也應該可以繼續使用,儘管用戶的功能已經減少。戴夫史密斯 outlines the expected results 傳統的應用程序調用方法無權限。

+0

因此,就像你的例子,對於互聯網許可,它會得到一個超時?以及相機允許什麼? – Nanoc

+0

@Nanoc:'INTERNET'不是'危險'權限,不能被用戶撤銷。被撤銷的CAMERA會導致帶有原始android.hardware.Camera API的CameraAccessException,就好像相機已存在但被策略(例如設備管理規則)阻止。您應該對'android.hardware.camera2' API獲得類似的效果,但我忘記了確切的症狀。 – CommonsWare

+2

感謝您的解釋,所以使用互聯網對谷歌來說並不危險......很高興知道。 – Nanoc