如題,在Android Studio中使用NEXUS 7模擬器開啟自己開發的app並使用camera2 API,
camera API中代表啟動成功才會得到回呼的onOpen方法也確實得到呼叫,但畫面豪無反應。
確認前後鏡頭在AVD的設定都有開啟,且只有不管前後鏡頭都選擇模擬,或是只有後鏡頭是選擇webCam,都無法解決
也試過從5.1開始到Oreo之後的各個平台,還是無法解決。
在Stack Overflow看到有人分享說Emulator預設相機都是關閉的,必須找到Config.ini檔案並在裡面加入hw:camera=yes
,我是用mac,但完全找不到那檔案,且AVD設定裡面也已經有設定相機是否要開啟前後鏡頭,感覺架構已經更改,不會產生config檔案?
以下是logcat在按下camera按鈕後的紀錄及相關程式碼:
11-14 18:21:02.627 2739-2739/com.kiahstarck.exercise I/CameraManagerGlobal: Connecting to camera service
11-14 18:21:02.658 2739-2739/com.kiahstarck.exercise I/CameraManager: Using legacy camera HAL.
11-14 18:21:02.765 2739-2739/com.kiahstarck.exercise I/System.out: Camera's successfully opened
final CameraDevice.StateCallback sb=new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
System.out.println("Camera's successfully opened");
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
}
};
final Handler handler=new Handler();
final ImageButton take_photo_btn=(ImageButton)findViewById(R.id.take_photo_btn);
take_photo_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CameraManager manager =
(CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
String[] ids=manager.getCameraIdList();
int permission = ActivityCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CAMERA);
System.out.println("允許值"+permission);
if (permission != PackageManager.PERMISSION_GRANTED) {
//未取得權限,向使用者要求允許權限
System.out.println("未取得權限,向使用者要求允許權限");
ActivityCompat.requestPermissions(
MainActivity.this,
new String[] {CAMERA},
REQUEST_CAMERA_ACCESS);
// manager.openCamera(ids[0], sb, handler);
} else{
System.out.println("已有權限");
System.out.println(ids[0]);
manager.openCamera(ids[0], sb, null);
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}});
非常感謝任何提供建議的朋友!謝謝!
既然是相機功能
建議你使用真機來測試