Android M run-time permissions request

首次在 Google Play Developer Console 看到 "當機與ANR" 有一筆 Exception 出現


訊息如下
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity clip={text/uri-list U:file:///storage/emulated/0/Pictures/Temp/temp.png} (has extras) } from ProcessRecord{82c52a4 13909:tools.sporting.com.pictranslate/u0a36} (pid=13909, uid=10036) with revoked permission android.permission.CAMERA


Google 大神說從 Android M 以上版本的權限取得有改變。

除了以往 mainifests 要求的權限外,在執行時期還要確認使用者是否允許權限使用,

使用者不允許的話還要說明權限需求的原因。

那些權限須要特別注意呢?
 Android 6.0 新增的權限模式 - 執行時要求權限 (Runtime Permissions)

-----------------
後記

手邊沒有Android M的手機可以測試,昨天改的版本是否可正常運作在 Android M以上版本有待確認。

看完 Issue 188073 的討論後,我的理解是以往透過 intent 去使用系統的 MediaStore.ACTION_IMAGE_CAPTURE、MediaStore.ACTION_VIDEO_CAPTURE、Intent.ACTION_CALL 是不須要在 mainifests 宣告權限,可是在這 Android M 以上版本的政策實施後,除了原始 app 須要宣告權限,還要在呼叫 intent 時確認權限的取得,到下一個 camera app 後,會再確認一次權限。 這無疑是對使用者跟開發人員造成困擾,看來以上這三個 intent 都要自己實作了。

在還沒看這討論串前,有想過為什麼不能在呼叫 intent 時,也把相應的權限授與給另一個 app 呢?  不解呀!

請參考

Android M Camera Intent + permission bug?

Issue 188073: Use intent ACTION_IMAGE_CAPTURE to launch camera app requires CAMERA permission

留言

這個網誌中的熱門文章

[IIS] 自我簽署憑證來啟用SSL

相見恨晚的自動化測試開發工具 Sikuli

sqlplus 中文亂碼解決方案