在做Android開發(fā)過(guò)程中,兼容問(wèn)題一直都是安卓攻城獅們的常見的一個(gè)問(wèn)題,各種手機(jī)品牌的兼容。還有API版本高低的兼容。
這里主要針對(duì)Android相機(jī)開發(fā)的兼容問(wèn)題之 Fail to connect camera service錯(cuò)誤;剛遇到這個(gè)問(wèn)題的時(shí)候,在網(wǎng)上看了好多資料,大部分都是說(shuō)的這四種元(都是容易忽略的東西):
1、手機(jī)上有安裝安全過(guò)濾軟件,因?yàn)镃amera屬于較為敏感權(quán)限,所有有些手機(jī)安全軟件會(huì)自動(dòng)拒絕Camera的打開操作,就會(huì)出現(xiàn)connect fail 錯(cuò)誤。
解決辦法:在手機(jī)安全軟件中,降低Camera的安全級(jí)別,或者把自己的APP添加到白名單中。
個(gè)人評(píng)價(jià):對(duì)于用戶還可以實(shí)施。對(duì)于安卓攻城獅來(lái)說(shuō)~然而并沒有什么卵用。
2、AndroidManifest.xml文件里面沒有添加Camera的權(quán)限。沒啥可說(shuō)的,添加上就可以了:
<uses-permission android:name="android.permission.CAMERA">
3、之前打開過(guò)camera,沒有釋放。釋放掉:
camera.stopPreview(); ?
?camera.release();
camera = null;
4、內(nèi)容占用過(guò)多,可能導(dǎo)致了自己應(yīng)用可分配的內(nèi)存不足。這種場(chǎng)景一般是因?yàn)槟銓?duì)攝像頭取得的每一幀數(shù)據(jù)都進(jìn)行了額外的處理,隨著處理的次數(shù)越來(lái)越多,如果沒有及時(shí)銷毀掉前面的對(duì)象,就會(huì)出現(xiàn)這個(gè)錯(cuò)誤。
解決辦法:把之前的對(duì)象釋放掉。
我遇到的問(wèn)題,這四個(gè)辦法都沒有解決;問(wèn)題屬于第二種情況,但是我的AndroidManifest.xml文件里面添加了權(quán)限的申請(qǐng),這是為什么呢?因?yàn)椋?/p>
針對(duì)android 6.0(API 23)及以前的版本,在AndroidManifest.xml文件里面添加權(quán)限就可以用了,但是對(duì)于Android 6.0以后的版本,系統(tǒng)允許用戶單獨(dú)管理應(yīng)用的某個(gè)權(quán)限,打開或者關(guān)閉。我遇到的問(wèn)題就是這個(gè)API版本兼容的問(wèn)題。
解決辦法:在進(jìn)行相機(jī)操作之前,檢測(cè)相機(jī)權(quán)限,
if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
//申請(qǐng)WRITE_EXTERNAL_STORAGE權(quán)限
ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.CAMERA},1);}
if里面是檢測(cè)是否用Camera權(quán)限,如果沒有則去申請(qǐng)。彈出對(duì)話框,用戶來(lái)確認(rèn)打開與否。