5

電話のカメラとandroid.provider.MediaStore.ACTION_IMAGE_CAPTUREを使用して、アプリケーションから画像をキャプチャしています。

キャプチャ ボタンをクリックすると、保存または破棄が表示されます。保存ボタンをクリックするとアプリではなくカメラに戻ります。画像は、私が宣言した出力ファイルではなくギャラリーに保存されます。

以下は私のコードです

    @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Intent in=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(in, 0);

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK) {
    Bitmap bm=(Bitmap) data.getExtras().get("data");
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

    //you can create a new file name "test.jpg" in sdcard folder.
    File f = new File(Environment.getExternalStorageDirectory()
                            + File.separator + "player1.jpg");
    try {
        f.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //write the bytes in file
    FileOutputStream fo = null;
    try {
        fo = new FileOutputStream(f);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        fo.write(bytes.toByteArray());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        Intent pic=new Intent(pic1.this, GameMenu.class);
        startActivity(pic);
        finish();
    }
}
else {
    Toast.makeText(getApplicationContext(), "Canceled", Toast.LENGTH_LONG).show();
    Intent pic=new Intent(pic1.this, Menu.class);
    startActivity(pic);
    finish();
}

解決策があれば親切に提案してください..事前に感謝します...

EDIT 1: samsung galaxy y duos (android 2.3.6) でこのコードが正しく動作していないことを確認しました。そして、galaxy pop(2.2.1) と HTC wildfire(2.3.5) で同じことを確認し、完璧に動作しました。

4

5 に答える 5

2

以下のインテントを使用して画像をキャプチャしetTempFile()ます。g はストレージ パスを指定する場所です

Intent photoPickerIntent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                       photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempFile());

                       photoPickerIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
                       photoPickerIntent.putExtra("return-data", true);
                       startActivityForResult(photoPickerIntent,TAKE_PICTURE);

getTempFile:

private Uri getTempFile() {


        File root = new File(Environment.getExternalStorageDirectory(), "Directory");
        if (!root.exists()) {
            root.mkdirs();
        }
             File file;

             file = new File(root,filename+".jpeg" );

             muri = Uri.fromFile(file);
             photopath=muri.getPath();

              Log.e("getpath",muri.getPath());
              return muri;

           }

その他のスレッドについては、こちらをお読みください

于 2012-08-29T07:05:46.340 に答える
0

これがコード全体である場合は、 setContentView(); を省略しています。戻ってこない原因かもしれません。

  @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
     // setContentView() here
    Intent in=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(in, 0);

}

onActivityResult() メソッドは呼び出されていますか?

于 2012-08-29T07:06:14.027 に答える
0

同じ問題が発生しました。デバイスを再起動し、アプリケーションをテストして正常に動作するようにしました。別のコード実装アプリケーションが応答しない可能性があります。デバイスを再起動してテストし、動作するかどうかをお知らせください

于 2012-11-09T05:06:17.913 に答える
0

カメラを開いてファイルを作成する必要があります。ファイル URI をカメラ インテントの追加として指定します。

/**
 * Capturing Camera Image will lunch camera app request image capture
 */
private void captureImage() {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri();

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

これは私がファイルを作成する方法です:

/**
 * Creating file uri to store image
 * 
 * 
 * @return Uri
 */
public Uri getOutputMediaFileUri() {
    return Uri.fromFile(getTempOutputMediaFile());
}

/**
 * returning File
 * 
 * 
 * @return File
 */
private File getTempOutputMediaFile() {

    File appDirectory = this.getFilesDir();

    File mediaStorageDir = new File(APP_NAME,
                YOUR_IMAGE_DIRECTORY_NAME);

    Log.i("mediaStorageDir", mediaStorageDir.getAbsolutePath());

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.i(YOUR_IMAGE_DIRECTORY_NAME,
                    "Oops! Failed create "
                            + YOUR_IMAGE_DIRECTORY_NAME
                            + " directory");
            return null;
        }
    }

    // Create a media file name
    UUID temporaryImageUuid = UUID.randomUUID();
    File mediaFile;

    mediaFile = new File(mediaStorageDir.getPath() + File.separator
            + temporaryImageUuid + "." + YOUR_EXTENSION);

    return mediaFile;
}
于 2014-04-14T23:09:34.217 に答える