【问题标题】:Android Camera2 front cameraAndroid Camera2前置摄像头
【发布时间】:2015-09-08 16:07:37
【问题描述】:

我最近注意到相机 API 已被弃用,我发现了名为 Camera2 的新 API。

我已经阅读了文档,但我不是很明白。

所以我的问题是:如何使用新的摄像头 api 预览前置摄像头?

只是预览,不是录制。

我想使用这个新 API,因为我猜将来当前的 Camera API 将被替换并停止工作。

所以我想做好准备,在每个人都惊慌失措的时候坐下来观看。呵呵

【问题讨论】:

    标签: android android-5.0-lollipop android-camera2


    【解决方案1】:

    首先,找出你的前置摄像头的id(如果有的话)

        CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
                try {
                    return manager.getCameraIdList();
                } catch (CameraAccessException e) {
                    return null;
                }
    

    然后像这样找到faceCamera:

    CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);
    
            if (cameraCharacteristics == null)
                throw new NullPointerException("No camera with id " + cameraId);
    
            return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;
    

    最后,您必须使用该 id 设置相机:

    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
       try {
           characteristics = manager.getCameraCharacteristics(mCameraId);
       }  catch (CameraAccessException e) {
           e.printStackTrace();
       } 
    

    注意,这些只是关于如何做你想做的事的提示。 有关如何开始预览等的详细信息,请参阅: http://developer.android.com/samples/Camera2Basic/index.html

    【讨论】:

      【解决方案2】:

      0 表示返回 1 代表正面

      对于 Back 相机,我们必须在 openCamera 方法中执行此操作:

      cameraId = manager.getCameraIdList()[0];

      对于面对 Front 摄像头,我们必须在 openCamera 方法中添加以下行:

      cameraId = manager.getCameraIdList()[1];

      我已经添加了所有代码和截图here

      【讨论】:

      • 如果你看源码public static final int LENS_FACING_BACK = 1; -_-
      • 这个答案应该被删除,因为它指向错误的外部来源
      • @francogrex 感谢您指出这一点。请查看此链接justpaste.it/3a970
      【解决方案3】:

      我们可以得到我们设备中相机的特征

         private void getCameraCharacteristics (){
             try {
             CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
                 for(String id : manager.getCameraIdList()){
                     Log.e(TAG, "Camara: Id " + id );
                     CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
                     List<CameraCharacteristics.Key<?>> listaCaracteristicas = cameraCharacteristics.getKeys();
                     for(CameraCharacteristics.Key<?> caracteristica : listaCaracteristicas){
                         Log.i(TAG,  "caracteristic: " + caracteristica.getName()  + " : " + cameraCharacteristics.get(caracteristica));
                     }
                     Log.i(TAG, listaCaracteristicas.toString());
                 }
             } catch (CameraAccessException e) {
                 e.printStackTrace();
             }
      
         }
      

      其中一个特征是android.lens.facing,所以根据这个值我们可以得到Frontal camera:

       if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
                    //Frontal camera
        }
      

      这是获取此值的方法:

      private String getIdFrontalCamera () {
          try {
              CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
              for(String id : manager.getCameraIdList()){
                  CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
                  //Seek frontal camera.
                  if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
                      Log.i(TAG, "Camara frontal id " + id);
                      return id;
                  }
              }
          } catch (CameraAccessException e) {
              e.printStackTrace();
          }
          return "0";
      }
      

      大多数时候前置摄像头的id是1。

      【讨论】:

        【解决方案4】:

        我使用 Google Camera2 API 示例中的代码进行了一些更改,以使前后摄像头正常工作,包括在本地保存图像并使用叠加层更改 TextureView 的形状。

        我也使用 exif 接口处理图像旋转。

        代码有点多,所以我将发布一个指向我的 GitHub 存储库的链接:

        https://github.com/craigspicer/Camera2API

        https://nullparams.com/camera-2-api-tutorial/

        【讨论】:

        • 这两个链接都不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 2019-06-27
        相关资源
        最近更新 更多