私の要件は、カメラプレビューを表示することでも、画像キャプチャにカメラインテントを使用することでもありません。
そこで、最初のテストデバイス(Galaxyタブ7 ")で機能する方法を見つけました。
私のCaptureImage
機能は以下の通りです
private void CaptureImage() {
int FrontCameraFound = getCameraID();
if (FrontCameraFound != -1) {
mCamera = Camera.open(FrontCameraFound);
parameters = mCamera.getParameters();
mCamera.setParameters(parameters);
mCamera.startPreview();
Camera.PictureCallback mCall = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
// set bitmap tp image view just to check
// if image capture proper, testing purpose
iv_image.setImageBitmap(bmp);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
};
mCamera.takePicture(null, null, mCall);
}
}
以下のようにgetCameraID
機能します
private int getCameraID() {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
// for capture image from back camera
// If want to capture from front
// then change it to CAMERA_FACING_FRONT
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
try {
return camIdx;
} catch (RuntimeException e) {
}
}
}
return -1;
}
現在、さまざまなデバイスで上記のコードを正常に実行するのが困難になっています。
- Samsung Galaxy S +(2.3.6):フロントカメラは常に緑色の画像を返しますが、バックカメラのコーディングは正常に機能します。
- サムスンギャラクシーネクサス(4.1):コーディングがフロントカメラでもバックカメラでも機能せず、「takePicture」が失敗しました。
- LG Optimus Net(2.3.4):バックカメラのみがあり、正常に動作しています。
- Samsung Galaxy Tab 7 "(2.3.3):両方のカメラが正常に動作しています。
- Motorola Xoom(3.1):両方のカメラが正常に動作しています。
サムスンギャラクシーネクサスのLogcat:
09-21 09:37:42.125: E/AndroidRuntime(4647): Caused by: java.lang.RuntimeException: takePicture failed
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.native_takePicture(Native Method)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.takePicture(Camera.java:1061)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.hardware.Camera.takePicture(Camera.java:1006)
09-21 09:37:42.125: E/AndroidRuntime(4647): at fortyonepost.com.pwop.TakePictureDemoActivity.CaptureImage(TakePictureDemoActivity.java:63)
09-21 09:37:42.125: E/AndroidRuntime(4647): at fortyonepost.com.pwop.TakePictureDemoActivity.onCreate(TakePictureDemoActivity.java:36)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.Activity.performCreate(Activity.java:5008)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
09-21 09:37:42.125: E/AndroidRuntime(4647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
すべてのデバイスのコードを確認することはできません。5つのデバイスでコードをテストするだけで、2つのデバイスで問題が発生するため、意図せずにプレビューせずにカメラから画像を取得する標準的な方法はありますか。
マニフェストに含めて、最小SDKバージョンを9に設定していることに注意してください
更新:takePicture Failed
Camera.javaクラスの行番号1061の
4.1 Nexus Galaxyで、これをスローした情報を提供するクラスリンクを次に示します。native_takePicture(msgType); function in Camera.java