Cameraアプリの実装01
いよいよ、カメラアプリの実装に移ります。
カメラアプリにはgoogleがGitHubにサンプルコードを載せていますが、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;
}
ちょっとこのあたりを修正していきたいと思いますが、なかなか時間もとれず悪戦苦闘しています。