我想在我的Android应用程序中使用前camara拍照,我尝试了这段代码,但不是没有工作,一直打开卡马拉。我的代码是。
Intent callCameraApplicationIntent = new Intent();
callCameraApplicationIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//camera application is called to capture
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException e) {
e.printStackTrace();
}
callCameraApplicationIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
callCameraApplicationIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
startActivityForResult(callCameraApplicationIntent, activityStartCameraApp);
答案 0 :(得分:1)
取自Google相机的Android 7.1快捷方式(但应与旧版Androids配合使用)
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
所以,结合以前的答案,这对我来说可以在我可以测试的所有手机上使用
intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
答案 1 :(得分:0)
尝试以这种方式使用更多功能权限:
<!--Front camera-->
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
IMO,使用带有 Intent 的前置摄像头,并没有很好地记录,也没有在大多数设备上工作。
您可以使用定义为SurfaceView
的相机预览类来显示来自相机的实时图像数据,以便用户可以构图和捕捉图片或视频。该类实现SurfaceHolder.Callback
以捕获用于创建和销毁视图的回调事件,这是分配摄像机预览输入所需的。
private Camera openFrontCamera() {
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) {
try {
cam = Camera.open(camIdx);
} catch (RuntimeException e) {
// Log.e(TAG, "Failed to open: " + e.getLocalizedMessage());
}
}
}
return cam;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//Creates a Camera object to access a particular hardware camera.
// and throw a RuntimeException if camera is opened by other applications
mCamera =openFrontCamera();
try {
mCamera.setPreviewDisplay(surfaceView.getHolder());
} catch (Exception e) {
e.printStackTrace();
}