私のアプリケーションには2つのメソッドが実装されています。最初の、dispatchTakePictureIntentはstartActivityForResultを呼び出します。だから私の活動が終わったら、私はonActivityResultに戻ります。startActivityForResult for photo android
私のアプリケーションはイベントを使用しているので、特定のイベントを受け取ったときにカメラを起動するので、写真を撮ることができます。問題は、私が写真を撮るには、私がアクティビティを開始した後で、ディスプレイに触れることなく、またリモートデバイスから別のイベントを受け取るだけでどうしたらいいですか?指を使わずに写真を撮る方法はありますか?
public void takePictureNoPreview(Context context){
// open back facing camera by default
Camera myCamera=Camera.open();
if(myCamera!=null){
try{
//set camera parameters if you want to
//...
// here, the unused surface view and holder
SurfaceView dummy=new SurfaceView(context)
myCamera.setPreviewDisplay(dummy.getHolder());
myCamera.startPreview();
myCamera.takePicture(null, null, getJpegCallback()):
}finally{
myCamera.close();
}
}else{
//booo, failed!
}
private PictureCallback getJpegCallback(){
PictureCallback jpeg=new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream fos;
try {
fos = new FileOutputStream("test.jpeg");
fos.write(data);
fos.close();
} catch (IOException e) {
//do something about it
}
}
};
}
}
:
おかげ
private void dispatchTakePictureIntent(int actionCode) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
switch(actionCode) {
case ACTION_TAKE_PHOTO_B:
File f = null;
try {
f = setUpPhotoFile();
mCurrentPhotoPath = f.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
} catch (IOException e) {
e.printStackTrace();
f = null;
mCurrentPhotoPath = null;
}
break;
default:
break;
}
startActivityForResult(takePictureIntent, actionCode);
}
は、だから私はこのコードを使用し、私はシステムコールを行う必要がありonActivityResult ..
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ACTION_TAKE_PHOTO_B: {
if (resultCode == RESULT_OK) {
handleBigCameraPhoto();
}
break;
}
default:
break;
}
}
これはカスタムカメラを実装することで可能です。上記のコードはそれを助けませんでした。リンク:https://github.com/googlesamples/android-Camera2Basicをご覧ください。 –