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