android使用android前置摄像头拍照不工作

时间:2016-12-09 08:05:09

标签: java android android-intent android-camera android-camera-intent

我想在我的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);

2 个答案:

答案 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();
      }