記一次Android調用外部攝像頭失敗的問題


問題代碼

if (mUsbManager.hasPermission(device)) {
  process(device);
} else {
  try {
    // パーミッションがなければ要求する
    mUsbManager.requestPermission(device, mPermissionIntent);
  } catch (final Exception e) {
    // Android5.1.xのGALAXY系でandroid.permission.sec.MDM_APP_MGMTという意味不明の例外生成するみたい
    processCancel(device);
  }
}

 

現象描述

這里本應該在判斷沒有權限時會動態的申請USB權限,並彈窗請求確認。
實際運行時,會判斷沒有權限,進入請求權限,不會彈窗請求確認,並且不會拋出異常,再次運行時仍然是沒有權限。

有說日志會打印這段話,我這沒看到,可能是日志太多沒注意到。

UsbUserSettingsManager: Camera permission required for USB video class devices

 

原因

SDK版本的問題,SDK28之后需要先授權camera權限之后,才可以正常運行。
經測試手動授權camera之后就可以正常調用攝像頭了。

解決辦法

manifest里加入

 <uses-permission android:name="android.permission.CAMERA"/>

 

Activity里加入動態申請相機、和存儲權限代碼。由於請求權限是異步的,所以需要在調用攝像頭之前就申請完。

ActivityCompat.requestPermissions(this,
    new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},
    1);

 

高版本的運行沒問題,低版本的系統運行時每次都會彈出授權,需要加個判斷。

if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
    ActivityCompat.requestPermissions(this,
      new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},
      1);
}

但是這個判斷在高版本里不兼容,所以要兼容的話還需要加一個版本判斷(android.os.Build.VERSION.SDK_INT)

 

順便推薦一下ADB WIFI  插件 手機只有一個usb口,插上設備就不能調試,買的分線器也不行,后來發現這款插件,可以插着設備調聯機調試了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM