読者です 読者をやめる 読者になる 読者になる

マツリさんの日記

androidプログラミング初心者の奮闘日記です。今年は統計検定1級も受験したい。

Cameraアプリの実装01

android studio

 いよいよ、カメラアプリの実装に移ります。

 カメラアプリにはgoogleGitHubにサンプルコードを載せていますが、fragmentが使われていて、初心者の私にはなかなか手が出せません。

 したがいまして、様々なプログラマの方々が示してくださっているサンプルコードを参考にしながらやってみたいと思います。

 まず、結論ですが、カメラアプリ自体はコード上は様々なエラーを一つずつ取り除いてやっとコンパイルできました。

 しかし、実機でアプリが立ち上がらない・・・

 原因については現在勉強中ですが、setUpCameraOutputs()メソッドという端末のカメラの情報を取得する処理中で、cameraIdがnullになっているからみたいです。

 MainActivity.java

// 端末で利用できるカメラ情報の取得
private String setUpCameraOutputs(int width, int height) {
// getSystemServiceメソッドを使ってCameraManagerのインスタンスの取得(Context.CAMERA_SERVICEを指定)
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);

// フロントカメラを利用しない
Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
continue;
}
// ストリーム制御をサポートしていない場合、セットアップを中断する
StreamConfigurationMap map = characteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (map == null) {
continue;
}

// 最大サイズでキャプチャする
Size largest = Collections.max(
Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
new CompareSizesByArea());

setUpPreview(map.getOutputSizes(SurfaceTexture.class),
width, height, largest);
configurePreviewTransform(width, height);

mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
ImageFormat.JPEG, /*maxImages*/2);
mImageReader.setOnImageAvailableListener(
new ImageReader.OnImageAvailableListener() {

@Override
public void onImageAvailable(ImageReader reader) {
File file = new File(getExternalFilesDir(null), "pic.jpg");
mThread.getHandler().post(new ImageStore(reader.acquireNextImage(), file));
}

}, mThread.getHandler());

return cameraId;
}
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
// Camera2 API未サポート
Log.e(TAG, "Camera Error:not support Camera2API");
}

return null;
}

 ちょっとこのあたりを修正していきたいと思いますが、なかなか時間もとれず悪戦苦闘しています。