【问题标题】:android take photo using android front camera not workingandroid使用android前置摄像头拍照不工作
【发布时间】:2016-12-09 08:05:08
【问题描述】:

我想在我的 android 应用程序中使用前置摄像头拍照,我尝试了此代码,但始终无法打开后置摄像头。我的代码是。

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);

【问题讨论】:

  • 你试过把callCameraApplicationIntent.putExtra("android.intent.extras.CAMERA_FACING", 1)改成'callCameraApplicationIntent.putExtra("android.intent.extras.CAMERA_FACING", 0)`,大多数相机都有一个Int值,我猜1是在引用前置摄像头,改成0可以切换到后置摄像头
  • @MuyideIbukun 不工作
  • 哦,那暂时不知道是什么问题,代码看起来是正确的

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


【解决方案1】:

取自 Google 相机的 Android 7.1 快捷方式(但应该适用于较旧的 Android)

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);

【讨论】:

    【解决方案2】:

    尝试以这种方式使用更多的功能权限:

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

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多