Android判斷用戶開啟了攝像頭權(quán)限

如題,既然是判斷用戶是否允許了攝像頭權(quán)限,那么,咱們就忽略是Manifest權(quán)限配置的問題,因為這是開發(fā)者的事。

用戶首次使用APP調(diào)用攝像頭功能,手機(jī)會提示是否允許該應(yīng)用使用攝像頭。有些用戶小手一抖、或者任性禁止權(quán)限,咔擦,就給你關(guān)了,那好了。下回再用攝像頭,就會出現(xiàn)APP界面一片黑,或者崩潰的情況。


作為開發(fā)者,正常思路是要提示用戶:“攝像頭權(quán)限被你關(guān)了,趕緊去手動開啟,不然,就別想用該功能了!"。那,咱們該怎么實現(xiàn)這個思路呢?

第一步、判斷攝像頭權(quán)限

Android API沒提供判斷攝像頭權(quán)限是否被關(guān)閉的方法,但是,我們依然有辦法,直接上代碼:

public static boolean isCameraUseable() {

boolean canUse =true;

Camera mCamera =null;

try{

mCamera = Camera.open();

// setParameters 是針對魅族MX5。MX5通過Camera.open()拿到的Camera對象不為null

Camera.Parameters mParameters = mCamera.getParameters();

mCamera.setParameters(mParameters);

}catch(Exception e) {

canUse =false;

}

?if(mCamera !=null) {

?mCamera.release();

?}

?return canUse;

?}

上面方法,放心copy到你的代碼里,在使用攝像頭邏輯之前,調(diào)用一下,返回ture說明攝像頭權(quán)限是開啟的。反之,攝像頭權(quán)限被用戶關(guān)掉了。

附注:

1、上面代碼思路是通過調(diào)用Camera.open(),然后根據(jù)是否出現(xiàn)異常來判斷權(quán)限狀態(tài)。Google就是這么干的!感興趣的同學(xué)可以看看Android SDK源碼中,android.hardware.Camera這個類,在第490行左右的代碼。

? 2、例外:由于魅族MX5的ROM改了很多東西,Google大哥的方法不能完全直接用,于是又加了上面有注釋處的代碼,這里不做過多解釋。

第二步、給提示

如果攝像頭權(quán)限被用戶關(guān)掉了,處理思路是:彈出個對話框,提示用戶去系統(tǒng)設(shè)置中,找到攝像頭管理權(quán)限界面,手動打開攝像頭權(quán)限。


第三步、跳轉(zhuǎn)設(shè)置界面手動開啟權(quán)限

跳轉(zhuǎn)設(shè)置界面的代碼如下:

Intent intent =new Intent(Settings.ACTION_SETTINGS);

context.startActivity(intent);

到這兒,三個步驟結(jié)束了。


附注:有的人會問,為啥不簡單粗暴直接跳到攝像頭權(quán)限管理界面直接讓用戶開啟呢?代碼也容易,換個action不就行了?是的,這種思路沒錯,但是,不同廠家手機(jī)打開攝像頭權(quán)限管理界面的action是不一樣的,差別太大,本人驗證過,入門到放棄。。。感興趣的同學(xué)可以試試哦,驗證一下...(補(bǔ)充:文章寫完后,在簡書上剛好看到一篇文章很棒地詳細(xì)講述action的問題,現(xiàn)在附上:http://www.itdecent.cn/p/b5c494dba0bc)

最后附上github上一個關(guān)于權(quán)限的討論鏈接:https://github.com/android-cn/android-discuss/issues/174#issuecomment-289990995,大家可以看看去。


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

相關(guān)閱讀更多精彩內(nèi)容

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