我有一个使用前置摄像头的小应用程序。我一直在使用前置摄像头的方式似乎适用于大多数手机,但用户一直在报告 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 用户。任何帮助,将不胜感激!