Android判斷用戶是否允許了攝像頭權(quán)限實(shí)例代碼
如題,既然是判斷用戶是否允許了攝像頭權(quán)限,那么,咱們就忽略是Manifest配置的問(wèn)題,因?yàn)檫@是開(kāi)發(fā)者的事。
用戶在使用APP時(shí),如果首次進(jìn)入用攝像頭的地方,手機(jī)會(huì)提示是否允許該應(yīng)用使用攝像頭。有些用戶小手一抖、或者壓根就不想開(kāi)啟攝像頭,咔擦,就給你關(guān)了,那好了。下回再進(jìn)入該功能,就會(huì)出現(xiàn)APP一片黑,或者崩潰的情況。
作為開(kāi)發(fā)者,正常思路是要提示用戶,攝像頭權(quán)限被你關(guān)了,趕緊去手動(dòng)開(kāi)啟,不然,就別想用該功能了!那,咱們?cè)撛趺磳?shí)現(xiàn)這個(gè)思路呢?
一、判斷攝像頭權(quán)限
Android API沒(méi)提供判斷攝像頭權(quán)限是否被關(guān)閉的方法,但是,我們依然有辦法,直接上代碼:
public static booleanisCameraUseable() { boolean canUse =true; Camera mCamera =null; try{ mCamera = Camera.open(); // setParameters 是針對(duì)魅族MX5。MX5通過(guò)Camera.open()拿到的Camera對(duì)象不為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說(shuō)明攝像頭權(quán)限是開(kāi)啟的。反之,攝像頭權(quán)限被用戶關(guān)掉了。
附注:
1、可以看出代碼實(shí)現(xiàn)思路是通過(guò)調(diào)用Camera.open(),然后根據(jù)是否出現(xiàn)異常來(lái)判斷權(quán)限狀態(tài)。感興趣的同學(xué)可以看看Android SDK里的android.hardware.Camera這個(gè)類,在第490行左右的代碼,google就是這么干的。
Camera(intcameraId) { interr = cameraInitNormal(cameraId); if(checkInitErrors(err)) { switch(err) { case EACCESS: throw newRuntimeException("Fail to connect to camera service"); case ENODEV: throw newRuntimeException("Camera initialization failed"); default: // Should never hit this. throw newRuntimeException("Unknown camera error"); } } }
2、由于魅族MX5的ROM改了很多東西,google大哥的方法不能完全直接用,于是又加了上面有注釋處的代碼,這里不做過(guò)多解釋。
二、給提示
如果攝像頭權(quán)限被用戶關(guān)掉了,處理思路是:彈出個(gè)對(duì)話框,提示用戶去系統(tǒng)設(shè)置中,找到攝像頭管理權(quán)限界面,手動(dòng)打開(kāi)攝像頭權(quán)限。
三、跳轉(zhuǎn)設(shè)置界面手動(dòng)開(kāi)啟權(quán)限
跳轉(zhuǎn)設(shè)置界面的代碼如下:
Intent intent =new Intent(Settings.ACTION_SETTINGS); context.startActivity(intent);
附注:有的人會(huì)問(wèn),為啥不直接跳到攝像頭權(quán)限管理界面去呢,換個(gè)action不就行了?是的,這種思路沒(méi)錯(cuò),但是不同廠家手機(jī)打開(kāi)攝像頭權(quán)限管理界面的action是不一樣的,差別太大,本人試過(guò),整不動(dòng)。。。感興趣的同學(xué)可以試試哦,驗(yàn)證一下
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)手機(jī)監(jiān)控?cái)z像頭
- Android調(diào)用手機(jī)攝像頭的方法
- android開(kāi)發(fā)之調(diào)用手機(jī)的攝像頭使用MediaRecorder錄像并播放
- Android開(kāi)發(fā)教程之調(diào)用攝像頭功能的方法詳解
- Android實(shí)現(xiàn)調(diào)用攝像頭進(jìn)行拍照功能
- Android中判斷是否有前置攝像頭、后置攝像頭的方法
- Android實(shí)現(xiàn)調(diào)用攝像頭拍照與視頻功能
- Android調(diào)用前后攝像頭同時(shí)工作實(shí)例代碼
- Android使用MediaCodec將攝像頭采集的視頻編碼為h264
- Android實(shí)現(xiàn)調(diào)用手機(jī)攝像頭錄像限制錄像時(shí)長(zhǎng)
相關(guān)文章
Android Studio使用教程(一):下載與安裝及創(chuàng)建HelloWorld項(xiàng)目
這篇文章主要介紹了Android Studio使用教程(一):下載與安裝及創(chuàng)建HelloWorld項(xiàng)目,本文用詳細(xì)的圖文說(shuō)明講解了Android Studio初步使用,需要的朋友可以參考下2015-05-05手把手教你Android全局觸摸事件監(jiān)聽(tīng)
這篇文章主要介紹了Android全局觸摸事件監(jiān)聽(tīng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Android中利用App實(shí)現(xiàn)消息推送機(jī)制的代碼
Android中利用App實(shí)現(xiàn)消息推送機(jī)制的代碼,需要的朋友可以參考下。2011-05-05Android開(kāi)發(fā)Kotlin語(yǔ)言協(xié)程的依賴及使用示例
這篇文章主要為大家介紹了Android開(kāi)發(fā)Kotlin語(yǔ)言協(xié)程的依賴及使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Flutter?EventBus事件總線的應(yīng)用詳解
這篇文章主要為大家介紹了Flutter?EventBus事件總線的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android網(wǎng)絡(luò)技術(shù)HttpURLConnection詳解
這篇文章主要為大家詳細(xì)介紹了Android網(wǎng)絡(luò)技術(shù)HttpURLConnection的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07從源代碼分析Android Universal ImageLoader的緩存處理機(jī)制
這篇文章主要介紹了從源代碼分析Android Universal ImageLoader的緩存處理機(jī)制 的相關(guān)資料,需要的朋友可以參考下2016-01-01Android6.0指紋識(shí)別開(kāi)發(fā)案例
這篇文章主要為大家分享了Android6.0指紋識(shí)別開(kāi)發(fā)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09