我正在用新的camera2 API創建一個自定義攝像頭捕捉視頻。Android Camera2 API切換後端攝像頭
我的代碼深受Google here提供的代碼的啓發。我的相機預覽有一個按鈕,可以從後置攝像頭切換到前置攝像頭,然後從前置攝像頭切換回後置攝像頭 默認情況下,「相機預覽」活動與後置相機一起啓動。
出於某種原因,當我點擊了「開關/交換相機」按鈕首次上,它帶來的是前置攝像頭,因爲它應該,但每次我再次點擊,開關/交換沒有按」不再工作:預覽(在前置攝像頭上)會稍微變淡,就像發生了某種情況一樣,但仍保留在當前選定的(前置)攝像頭上。
這裏是我的代碼:
在RecordVideoFragment
,在onViewCreated
:
// Switch camera button
switchCameraButton = (ImageButton) view.findViewById(R.id.button_switch_camera);
// Listener for Switch cameras button
switchCameraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchCameras();
}
});
這裏是switchCameras()
功能:
private void switchCameras() {
mCameraOpenCloseLock.release();
mCameraDevice.close();
CameraManager mCameraManager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
try {
String mCameraId = mCameraManager.getCameraIdList()[0];
if (mCameraId.equals("0")) { // If currently on FRONT camera (0 = CameraCharacteristics.LENS_FACING_FRONT)
mCameraId = "1"; // switch to BACK camera (1 = CameraCharacteristics.LENS_FACING_BACK)
switchCameraButton.setImageResource(R.drawable.ic_camera_front);
} else { // If currently on BACK camera
mCameraId = "0"; // switch to front camera
switchCameraButton.setImageResource(R.drawable.ic_camera_back);
}
try {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
mCameraManager.openCamera(mCameraId, mStateCallback, null);
} else {
requestVideoPermissions();
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
} catch (CameraAccessException e) {
Toast.makeText(getActivity(), "Cannot access the camera.", Toast.LENGTH_SHORT).show();
getActivity().finish();
}
}
如果你對所發生的事情的任何想法那會救我。幾天來我一直在竊聽。非常感謝您
當我使用這個預覽的大小改變...我怎麼能防止這個? – Andrea
檢查你的紋理視圖是否給出了相同的尺寸,因爲在reopenCamera方法中,這是再次設置的。 – MrOnyszko
我跟着你的代碼,但它不適合我。我在「setUpCameraOutputs」方法'Integer facing = features.get(CameraCharacteristics.LENS_FACING); if(facing!= null && facing == CameraCharacteristics.LENS_FACING_FRONT){ continue; }' 所以我刪除了這個條件,但仍然沒有working.i後面[this](https://github.com/googlesamples/android-Camera2Basic) –