Hello there我是Camera API的newbiew。我正在向我自己学习!我只是想切换我的相机后台和前台! 我的设备有前后相机! 我这样做,如:使用Camera API在Android上切换摄像头
public class CameraFrag extends Fragment {
//Variables
private Camera mCamera;
private CameraPreview mPreview;
private ToggleButton flipCamera;
////////////////////////////////////
public CameraFrag() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//inflate the layout
View v = inflater.inflate(R.layout.frag, container, false);
flipCamera = (ToggleButton) v.findViewById(R.id.flipper);
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(getContext(), mCamera);
FrameLayout preview = (FrameLayout) v.findViewById(R.id.camera_preview);
preview.addView(mPreview);
flipCamera.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
try{
mCamera.stopPreview();
if(isChecked){
mCamera=openFrontFacingCamera();
}
else{
mCamera=openBackFacingCamera();
}
mCamera.startPreview();
}catch(Exception exp){
Log.i("#LOGTAG","EXCEPTION "+exp);
}
}
});
return v;
}
private Camera openBackFacingCamera() {
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
cam = Camera.open(camIdx);
}
}
return cam;
}
private Camera openFrontFacingCamera() {
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
cam = Camera.open(camIdx);
}
}
return cam;
}
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
}
的问题是,它总是抛出异常如:
I /#LOGTAG:EXCEPTION的Java。 lang.RuntimeException:无法连接到相机服务
,如果我用我的代码为:
try{
mCamera.stopPreview();
mCamera.release();
if(isChecked){
mCamera=openFrontFacingCamera();
}
else{
mCamera=openBackFacingCamera();
}
mCamera.startPreview();
}catch(Exception exp){
Log.i("#LOGTAG","EXCEPTION "+exp);
}
我的预览冻结,回来时,我点击后退按钮!
我在做什么错了?这是在相机之间切换的正确方法吗?有人可以帮我吗?
在此先感谢!
什么版本的Android?你添加了权限吗? –
API 13 MIn和API 23 MAX –
我在问你正在使用的设备。它是一个设备还是仿真器? –