1

アクティビティ「GameActivity」で写真を撮るSDカードに写真を保存する別のアクティビティで写真を使用する

問題は、画像を保存して何もしないと、画像が保存されることです。camera.takePictureの直後にアクティビティ(メソッドstartActivity)を開始すると、メソッドonPictureTakenが呼び出されません。

メソッドtakePictureの実行に時間がかかるためだと読んだので、このサイト(http://www.workreloaded.com/2011/06/how-to-use-the-android-camera )のアドバイスに従いました。 /)そしてAsyncTaskを拡張するクラスを作成しました

public class PhotoTask extends AsyncTask<Boolean, Void, Void> {
public PhotoTask(Camera camera, SurfaceView surfaceCamera,boolean isPreview, SurfaceHolder holder, GameActivity gameactivity) {
constructor
}

    @Override
protected Void doInBackground(Boolean... params) {
     camera.takePicture(null,null, myPictureCallback_JPG);
        Log.w("GAMEACTIVITY","TAKEPICTURE");
        return null;
}

    @Override
protected void onPostExecute(Void result) {
    Log.w("GAMEACTIVITY","INTENT");
     Intent intent = new Intent(gameactivity.getApplicationContext(),ShareActivity.class);
     // Sending the picture taken to ShareActivity
     intent.putExtra("PICTURE_TAKEN", output);
     gameactivity.startActivity(intent);
}


PictureCallback myPictureCallback_JPG = new PictureCallback(){

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Log.w("GAMEACTIVITY","FIRST");
            File imagesFolder = new File(Environment.getExternalStorageDirectory(), "/KersplattFolder");
            imagesFolder.mkdirs(); 
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
            String date = dateFormat.format(new Date());
            String fileName = "Kersplatt_" + date + ".jpg";
            output = new File(imagesFolder, fileName);
            try {
                FileOutputStream fos = new FileOutputStream(output);
                fos.write(data);
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            camera.startPreview();
            }
};

}

GameActivityにいる間、私は

PhotoTask photoTask = new PhotoTask(camera,surfaceCamera,isPreview,holder,GameActivity.this);
photoTask.execute(null);

画面をタッチしたとき(写真を撮るため)

私のメソッドonPictureTakenがそこで呼び出されないのはなぜですか?(onPostExecuteメソッドを削除するとまだ呼び出されます)

4

1 に答える 1

2

服用をお勧めします

 Intent intent = new Intent(gameactivity.getApplicationContext(),ShareActivity.class);
 // Sending the picture taken to ShareActivity
 intent.putExtra("PICTURE_TAKEN", output);
 gameactivity.startActivity(intent);

onPostExecuteの代わりにPictureCallbackに

画像の保存が完了したら、次のアクティビティに移動します

于 2013-01-30T13:52:18.957 に答える