アプリケーションの実行が開始された直後にプレビューなしで写真を撮ろうとしています。その後、ルートフォルダーの新しいフォルダー「pictures123」に写真を保存します。誰かが私のコードの何が問題になっているのか教えてもらえますか?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/");
if (!directory.exists()) {
directory.mkdir();
}
Camera camera = Camera.open(0);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(parameters);
SurfaceView mview = new SurfaceView(getBaseContext());
camera.setPreviewDisplay(mview.getHolder());
camera.setPreviewDisplay(null);
camera.startPreview();
camera.takePicture(null,null,photoCallback);
camera.stopPreview();
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/pictures123");
File file = new File (myDir, "pic1.jpeg");
FileOutputStream out = new FileOutputStream(file);
out.write(data);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
finish();
}
};
権限:
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
プレビューなしで写真を撮ることはできませんが、画面にプレビューを表示する必要はありません。代わりに、出力をSurfaceTextureに送ることができます(API11以降)。
詳細については、 この回答 を参照してください。
Camera 2 APIを使用している場合、プレビューやランチデバイスのカメラアプリなしで密かに写真を撮るには、githubで私のプロジェクトを確認できます。
https://github.com/botyourbusiness/Android-camera2-secret-picture-taker
それが役に立ったことを願っています:)
主な問題は、startPreviewの直後にtakePictureを呼び出していることであり、実際にはセットアップの完了に時間がかかると思います。したがって、これら2つの間に遅延を追加すると、この問題を一時的に修正できます 詳細についてはこちらをご覧ください 。
プレビューなしで写真を撮ることは不可能です。 Androidオンラインリファレンス: http://developer.Android.com/reference/Android/hardware/Camera.html#takePicture をお読みください。
注:このメソッドは、プレビューがアクティブな場合(startPreview()の後)にのみ有効です。画像が撮影された後、プレビューは停止されます。呼び出し元は、プレビューを再開したり、さらに写真を撮りたい場合は、startPreview()を再度呼び出す必要があります。これは、start()とstop()の間で呼び出さないでください。