2015-10-20 71 views
8

我的項目是一個長期運行的項目。我已經將目標版本設置爲10年,4年前。我不能將目標版本更改爲23,因爲我使用的是httpImageCache,並且還存在UI的問題。我的問題是,當棉花糖發佈我試圖與棉花糖10 targetVersion整合,棉花糖權限不適用於TargetVersion下面23

int returnedPermission = ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

此功能總是returing「0」如果我手動開啓或應用程序設置頁面關閉存儲許可。誰能幫幫我嗎?

+0

你能嘗試這種方法, 'Context.checkSelfPermission' 的非compat的版本? 0是常量'PackageManager.PERMISSION_GRANTED'。如果未授予,應返回'PackageManager.PERMISSION_DENIED'(-1)。 –

+0

是的,這是我想要的,當我從應用程序設置關閉它應該返回-1,但這個函數總是返回0. – neena

+0

它可能是兼容性庫中的錯誤。試試標準版,並檢查結果是否相同。 –

回答

2

任何人都可以幫我嗎?

刪除該代碼,因爲它對你沒用。如果您的targetSdkVersion低於23,則無法確定用戶是否吊銷了權限。

+0

所以我不能做任何事情,當用戶關閉權限。 – neena

+0

@neena:對。如果用戶撤銷權限,您不應該得到任何'SecurityExceptions',但受這些權限保護的API應該返回空結果(例如,沒有GPS修正,沒有聯繫人)。 – CommonsWare

4

由於@Commonware已經給出了答案,但在這裏我正在給可能幫助你的問題增加更多的細節。 按照官方Android開發者網站:

  • 如果設備運行的是Android 5.1或更低,或應用程式的目標 SDK是22或更低:如果你列出你的 清單危險的權限, 用戶在安裝應用程序時必須授予權限;如果他們沒有授予權限,系統根本不會安裝該應用程序。

  • 如果設備運行的是Android 6.0或更高版本,以及應用程式的目標 SDK爲23或更高:應用必須列出在 清單的權限,並且必須要求每個風險的權限,它需要 而該應用程序正在運行。用戶可以授予或拒絕每個權限, ,即使 用戶拒絕權限請求,該應用也可以繼續以有限的權限運行。

由於您的目標SDK爲10,應用程序將像以前一樣完美運行。無論如何請注意,用戶仍然可以撤銷後的權限..!雖然Android 6.0會在用戶嘗試這樣做時警告用戶,但無論如何他們都可以撤銷。

以上聲明取自official android developer site

+0

因此,如果targetVersion低於23,並且用戶撤銷權限,我無法做任何事情,對嗎? – neena

+0

當我們調用一個需要在targetSdkVersion小於23的應用程序上撤銷權限用戶的函數時,任何異常都不會被拋出。相反,它只是無所作爲。對於返回值的函數,它將根據大小寫返回null或0。儘管應用程序不會因調用函數而崩潰。它可能仍然可以從該應用程序接下來的操作和那些返回的值中崩潰。 –