35

画像のキャプチャとネイティブカメラアプリからの保存に問題があります。これが私のコードのサンプルです。

_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg";
File file = new File( _path );
Uri outputFileUri = Uri.fromFile( file );

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );

startActivityForResult( intent, 0 );

写真を撮影して元のアクティビティに戻った後、Android DDMSファイルエクスプローラーを介してSDカードに移動すると、写真が表示されません。なぜこれが保存されないのか誰もが知っていますか?

4

5 に答える 5

28

誰かがまだこのスレッドにアクセスしている場合の最終製品は次のとおりです。

public class CameraCapture extends Activity {

    protected boolean _taken = true;
    File sdImageMainDirectory;

    protected static final String PHOTO_TAKEN = "photo_taken";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        try {

            super.onCreate(savedInstanceState);         
                    File root = new File(Environment
                            .getExternalStorageDirectory()
                            + File.separator + "myDir" + File.separator);
                    root.mkdirs();
                    sdImageMainDirectory = new File(root, "myPicName");


                startCameraActivity();
            }
        } catch (Exception e) {
            finish();
            Toast.makeText(this, "Error occured. Please try again later.",
                    Toast.LENGTH_SHORT).show();
        }

    }

    protected void startCameraActivity() {

        Uri outputFileUri = Uri.fromFile(sdImageMainDirectory);

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
        case 0:
            finish();
            break;

        case -1:

            try {
                StoreImage(this, Uri.parse(data.toURI()),
                        sdImageMainDirectory);
            } catch (Exception e) {
                e.printStackTrace();
            }

            finish();
            startActivity(new Intent(CameraCapture.this, Home.class));

        }

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) {
            _taken = true;
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken);
    }

        public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
        Bitmap bm = null;
        try {
            bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
            FileOutputStream out = new FileOutputStream(imageDir);
            bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
            bm.recycle();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
于 2011-02-21T20:50:55.573 に答える
21

Environment.getExternalStorageDirectory()の出力を確認しましたか。これは、末尾のファイル区切り文字(/)が含まれていない場合、イメージは次のようなSDカードに存在しないディレクトリに配置されるためです。

 /mnt/sdcardmake_machine_example.jpg

あなたが本当に欲しいのは:

 /mnt/sdcard/make_machine_example.jpg

代わりにこのコードを試してください:

 _path = Environment.getExternalStorageDirectory() + File.separator +  "make_machine_example.jpg";
于 2010-08-16T07:18:56.260 に答える
14

1. 使うだけ

new File(Environment.getExternalStorageDirectory(),  "make_machine_example.jpg");

セパレーターについて気にしないでください。

2. 以前に同じ問題に直面しました。SenseUI フォンには、ファイルを作成しないカスタム カメラ アプリケーションがあります。どのようなデバイスを使用していますか? 最新のデバイスではすでに修正されている可能性がありますが、それでも問題になる可能性があります。写真をファイルに保存する際の問題を克服する方法の完全なサンプルを次に示します。

于 2010-08-18T06:31:11.647 に答える
1

画像を保存した後、メディアスキャンを実行する必要があります

 sendBroadcast(new Intent(
            Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://" + Environment.getExternalStorageDirectory())));
于 2012-10-26T13:30:22.003 に答える
-6

次の行を AndroidManifest.xml ファイルに追加し、拡張子 make_machine_example を削除します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

写真のキャプチャとSDカードへの保存が開始されます。

于 2011-04-21T06:11:45.137 に答える