安卓開發(fā)調(diào)用攝像頭一直失敗的原因及解決(權(quán)限問題)

安卓開發(fā)調(diào)用攝像頭一直失敗的原因及解決(權(quán)限問題)

最近開發(fā)安卓的時候,發(fā)現(xiàn)調(diào)用攝像頭一直出錯,導(dǎo)致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

查詢了網(wǎng)上的一些博客,發(fā)現(xiàn)大多數(shù)沒有答到點子上,有的人直接把自己的代碼全盤照搬,沒有參考價值?,F(xiàn)在發(fā)現(xiàn)原因如下:

1.Android 6.0之后權(quán)限需求的變動

以前的安卓權(quán)限都在manifest中一次申請,終身可用,到了安卓6.0(targetSdkVersion to 23)之后,為了防止權(quán)限濫用,Google就采取了一些措施:

a.對于targetSdkVersion低于23的APP,使用舊有規(guī)則:用戶在安裝的時候不得不接受所有權(quán)限(APP自帶),安裝后app就有了那些權(quán)限。

b.對于targetSdkVersion大于等于23的APP,使用新規(guī)則:app不得不在運行時一個一個詢問用戶授予權(quán)限。另外,用戶也可以隨時在設(shè)置里取消已經(jīng)授權(quán)的權(quán)限。

2.知道了原因,解決方案:

已經(jīng)在Manifest中配置了權(quán)限信息的情況下,在打開攝像頭之前,加上這樣一段代碼:ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);(詢問用戶授予權(quán)限)

解釋:ActivityCompat.requestPermissions(),這個方法接收三個參數(shù),分別是Activity的實例、String數(shù)組(manifest中的請求權(quán)限)、請求碼

注意:第一個參數(shù)需要activity的實例,我的MainActivity繼承的是默認(rèn)的APPCompatActivity,所以要加上".this"。

備注:這是最為直接、簡單的方法,會顯得有些簡陋,實際開發(fā)中會使用更加完善的方法,但是我覺得這對于初學(xué)者是最好理解的,

簡潔即是美。2018/11/6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容