サーフェス ビューを使用して、ユーザーにカメラ プレビューを表示しています。それを開始するための私の方法は次のとおりです。
private void pickCam(){
if (Camera.getNumberOfCameras() < 1)
return;
if (Camera.getNumberOfCameras() == 1)
{
CameraInfo cInfo=new CameraInfo();
Camera.getCameraInfo(0, cInfo);
camera = Camera.open(0);
}
else
camera = Camera.open(currentCamera);
Camera.Parameters parameters = camera.getParameters();
parameters = camera.getParameters();
parameters.setRotation(90);
try {
Camera.Size mCameraSize = null;
for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
if (size.width <= surfaceWidth && size.height <= surfaceHeight) {
if (mCameraSize == null)
mCameraSize = size;
else {
int currentArea = mCameraSize.width
* mCameraSize.height;
int newArea = size.width * size.height;
if (newArea > currentArea) {
mCameraSize = size;
}
}
}
}
parameters.setPreviewSize(mCameraSize.width, mCameraSize.height);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
camera.startPreview();
}
ユーザーがボタンをクリックすると:
if (camera != null)
camera.takePicture(null, null,this);
このコードは、Sony Xperia (2 台のカメラ) ではうまく機能しますが、HTC Wildfire と Samsung Galaxy S+ (両方とも 1 台のカメラ) ではプレビューが失敗します。スローされる例外はありません。何も表示されません。これらすべてのデバイスで写真を撮ることができます。
pickCamMethod の LogCat 出力は、両方のデバイスで空です。
04-23 14:25:22.987: I/System.out(5871): PickCamBegin
04-23 14:25:23.428: I/System.out(5871): PickCamEnd
すべての場合に機能させるにはどうすればよいですか?