[Android Studio]申请摄像头权限失败
轉載來源:安卓開發調用攝像頭一直失敗的原因及解決(權限問題)
安卓開發調用攝像頭一直失敗的原因及解決(權限問題)
最近開發安卓的時候,發現調用攝像頭一直出錯,導致APP直接崩潰,
錯誤代碼:java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/DCIM/20181106191203.jpg} (has extras) } from ProcessRecord{2db2ead 2049:com.example.kkk.imagetest/u0a295} (pid=2049, uid=10295) with revoked permission android.permission.CAMERA
查詢了網上的一些博客,發現大多數沒有答到點子上,有的人直接把自己的代碼全盤照搬,沒有參考價值。現在發現原因如下:
1.Android 6.0之后權限需求的變動
以前的安卓權限都在manifest中一次申請,終身可用,到了安卓6.0(targetSdkVersion to 23)之后,為了防止權限濫用,Google就采取了一些措施:
a.對于targetSdkVersion低于23的APP,使用舊有規則:用戶在安裝的時候不得不接受所有權限(APP自帶),安裝后app就有了那些權限。
b.對于targetSdkVersion大于等于23的APP,使用新規則:app不得不在運行時一個一個詢問用戶授予權限。另外,用戶也可以隨時在設置里取消已經授權的權限。
2.知道了原因,解決方案:
已經在Manifest中配置了權限信息的情況下,在打開攝像頭之前,加上這樣一段代碼:ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);(詢問用戶授予權限)
解釋:ActivityCompat.requestPermissions(),這個方法接收三個參數,分別是Activity的實例、String數組(manifest中的請求權限)、請求碼
注意:第一個參數需要activity的實例,我的MainActivity繼承的是默認的APPCompatActivity,所以要加上".this"。
備注:這是最為直接、簡單的方法,會顯得有些簡陋,實際開發中會使用更加完善的方法,但是我覺得這對于初學者是最好理解的,
簡潔即是美。2018/11/6
作者:云淡風輕_935f
鏈接:https://www.jianshu.com/p/ddf87ce7afef
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的[Android Studio]申请摄像头权限失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁饱和的产生原因和影响;磁化强度H和磁感
- 下一篇: Swift调用摄像头之权限判断