1

我有一个使用前置摄像头的小应用程序。我一直在使用前置摄像头的方式似乎适用于大多数手机,但用户一直在报告 S3 和其他各种新设备上的问题。我访问前置摄像头的方式是这样的:

// Find the ID of the front camera
        CameraInfo cameraInfo = new CameraInfo();
        for(int i = 0; i < numberOfCameras; i++) {
            Camera.getCameraInfo(i, cameraInfo);
            if(cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
                defaultCameraId = i;
                mCameraFound = true;
            }
        }
        if(!mCameraFound) 
            displayDialog(8);

从我添加到应用程序中的一些错误报告中,我注意到 S3 实际上找到了前置摄像头,但用户报告它只显示一个空白屏幕?我只能在我拥有的设备(GNex 和 N7)上进行测试。我希望这里的人可能对此有一些经验,或者可以帮助我解决这个问题。如果您想在 S3 上试用该应用程序,请查看下面的链接。提前致谢。

https://play.google.com/store/apps/details?id=com.wckd_dev.mirror

编辑:我创建了一个包含用于预览的 TextureView 的 MirrorView 对象。MirrorView 对象实现了一个 SurfaceTextureListener。在 onSurfaceTextureAvailable() 方法中是开始预览的地方。我还创建了一种在应用程序从隐藏变为可见后重新启动预览的方法。

所以在应用程序第一次启动时调用它:

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        try {
            if (mCamera != null) {

                Camera.Parameters parameters = mCamera.getParameters();
                parameters.setPreviewSize(mPreviewSize.height, mPreviewSize.width);
                requestLayout();

                mCamera.setParameters(parameters);
                mCamera.setPreviewTexture(surface);
                mCamera.startPreview();
            }
        } 
        catch(RuntimeException e) {
            // Log.e(TAG, "RuntimeException caused by setPreviewTexture()", exception);
        }
        catch (IOException e) {
            // Log.e(TAG, "IOException caused by setPreviewTexture()", exception);
        }
    }

restartPreview 调用是一个相同(但独立的)方法。从我通过用户收集的一些调试数据中,我注意到该应用程序在 S III 上找到了两个摄像头并选择了与 CAMERA_FACING_FRONT 匹配的 ID。此外,这个问题似乎并非在所有 S III 上都发生。我的用户也有同样多的反馈报告。遇到此问题的用户的最新报告是 AT&T S III 用户。任何帮助,将不胜感激!

4

1 回答 1

2

今晚与我的应用程序遇到此问题的 S3 进行了面对面的交流。这里发生了什么事。TextureView 依赖于 2d 硬件加速,默认情况下(据我所知)应该在 4.0+ 设备上启用。它没有在他的手机上打开(至少对于我的应用程序)。修复就像在清单中添加一行一样简单(在应用程序下)。

android:hardwareAcceleration = "true"
于 2012-11-15T04:40:09.667 回答