0

アプリでカムインテントを開始していますが、画像をアプリフォルダー内の画像フォルダーに保存したいと考えています。これを達成するために、私はこのようなカムインテントを開始しています

public void startCamAction(View view) {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));
    startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);
}

次のアクティビティでは、この画像で何かをしたいのですが、アプリがこのフォルダーにアクセスできないため、機能していないと思います。写真が保存されているフォルダは

content:://media/external/images/media/20

これは望ましいパスではありません。画像がアプリフォルダー内に保存されるように構成するにはどうすればよいですか?

ありがとう

4

3 に答える 3

1

実際content:://media/external/images/media/20には実際Uri のファイルパスではありません..

したがって、この Uri から実際のパスを取得する場合は、次のようにする必要があります。

Uri uri = content:://media/external/images/media/20
String imageFile = getRealPathFromURI(uri);

そして方法getRealPathFromURI()

private String getRealPathFromURI(Uri contentURI) {
    Cursor cursor = getContentResolver()
               .query(contentURI, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
}

アップデート:

また、コード行から、

intent.putExtra(MediaStore.EXTRA_OUTPUT, this.getApplicationContext().getDir("images", MODE_PRIVATE));

キャプチャした画像は、アプリケーションの内部ストレージに保存されます。したがって、どのアクティビティでも、アプリケーション内でこのディレクトリにアクセスできます。

このディレクトリからファイルを取得するには、単純なファイル操作を使用できます。

お気に入り、

File directory = this.getApplicationContext().getDir("images", MODE_PRIVATE);
于 2012-12-05T09:56:15.183 に答える
0

カメラがアプリのディレクトリに保存できるとは思えません。主に権利の問題のため。

最善の方法は、外部ストアに保存することです(URIから判断して、行ったようにcontent://media/external/images/media/20:)

いつでもこの URI を使用してファイルをコピーし、アプリ データ ディレクトリに保存してから、外部ディレクトリから削除できます。

他の解決策は、独自の ContentProvider を指定することです。この ContentProvider で、ファイルを保存できます。 http://dharmendra4android.blogspot.be/2012/04/save-captured-image-to-applications.html

于 2012-12-05T09:55:19.543 に答える
0

使用する

Context.getExternalCacheDir()
Context.getExternalFilesDir(String type)

アプリがアクセスできる SD カードのディレクトリを取得します。それは次のようになります

/sdcard/Android/your.app.package.name/

これをマニフェストに追加することを忘れないでください。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
于 2012-12-05T09:51:38.687 に答える