web-dev-qa-db-ja.com

Androidでカメラによって作成された写真のデフォルトディレクトリを取得するにはどうすればよいですか?

Androidのカメラで作成された写真のデフォルトディレクトリを取得したいと思っています。

コードAでそれができると思いますが、/storage/sdcard0/DCIMがログに表示されます。

しかし実際には、カメラで作成した私の写真は/storage/extSdCard/DCIMフォルダーに保存されています。

Androidでカメラによって作成された写真のデフォルトディレクトリを取得するにはどうすればよいですか?ありがとう!

コードA

File dir10 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
Log.e("MainActivity", "getExternalStoragePublicDirectory() 10:" + dir10.toString());

もっと

カメラで作成した写真のデフォルトの保存場所はユーザーが設定しているようです。メモリカードの場合もあれば、SDカードの場合もあります。ユーザーがカメラで作成した写真を保存するために選択した保存場所を知っているといいのですが。

enter image description here

6
HelloCW

getExternalStoragePublicDirectory()をパラメーターDIRECTORY_PICTURESとともに使用します

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(path, "DemoPicture.jpg");

DIRECTORY_DCIMは、デバイスをカメラとしてマウントするときの写真とビデオの従来の場所です。

DIRECTORY_PICTURESは、ユーザーが利用できる画像を配置するための標準ディレクトリです。

それが役に立てば幸い !

8
Abhishek Tandon

1.これは、ユーザーがデフォルトのカメラ出力方向を変更しなかった場合にのみ機能します

ドキュメントによると、2つのオプションがあります

DIRECTORY_DCIMデバイスをカメラとしてマウントするときの写真とビデオの従来の場所。

File musicDirectory = new File( getExternalFilesDir(Environment.DIRECTORY_DCIM));

DIRECTORY_PICTURESユーザーが使用できる画像を配置する標準のディレクトリ。

File musicDirectory = new File( getExternalFilesDir(Environment.DIRECTORY_PICTURES));

getExternalFilesDir()Fileオブジェクトを返します

ここで参照できます 開発者ページ

2.カメラで少なくとも1枚の写真を撮った場合にできる別のトリックがあります

String[] projection = new String[]{MediaStore.Images.ImageColumns._ID,MediaStore.Images.ImageColumns.DATA,MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,MediaStore.Images.ImageColumns.DATE_TAKEN,MediaStore.Images.ImageColumns.MIME_TYPE};     
final Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"); 
if(cursor != null){
    cursor.moveToFirst();
    //you can access last taken pics here. 
 }
4
Jayanth

Environment.getExternalStoragePublicDirectoryは、内部ストレージ上のディレクトリのみを取得するために使用されます。

セカンダリストレージ(存在する場合)にDCIMフォルダーを取得するには、次のコードに従う必要があります。

String secondStorage = System.getenv("SECONDARY_STORAGE");
File file = new File(secStore + "/DCIM");
File[] listFiles = file.listFiles();
2
Muhammad Ashraf
public class DefaultMediaRepository implements MediaRepository {
private final AppCompatActivity activity;
private LoaderManager supportLoaderManager;

DefaultMediaRepository(@NotNull AppCompatActivity activity) {
    this.activity = activity;
    supportLoaderManager = activity.getSupportLoaderManager();
}

public void media(int offset, CompletedListener<List<Media>> completedListener) {
    supportLoaderManager.initLoader((int) System.currentTimeMillis(), null,
            new MediaLoader(offset, completedListener));

}

class MediaLoader implements LoaderManager.LoaderCallbacks<Cursor> {
    private static final int LIMIT = 20;
    private Uri uri;
    private String selection;
    private String[] selectionArgs;
    private String sortOrder;
    private CompletedListener<List<Media>> completedListener;

    MediaLoader(int offset, CompletedListener<List<Media>> completedListener) {
        this.completedListener = completedListener;
        uri = MediaStore.Files.getContentUri("external");
        selection = "("
                + FileColumns.MEDIA_TYPE + "="
                + FileColumns.MEDIA_TYPE_IMAGE
                + " OR "
                + FileColumns.MEDIA_TYPE + "="
                + FileColumns.MEDIA_TYPE_VIDEO
                + ")"
                + " AND "
                + ImageColumns.BUCKET_DISPLAY_NAME
                + " = ?";
        selectionArgs = new String[]{"Camera"};
        sortOrder = ImageColumns.DATE_TAKEN + " DESC " +
                " LIMIT " + LIMIT + " offset " + offset;
    }

    @NonNull
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
        return new CursorLoader(activity.getApplicationContext(), uri, null, selection,
                selectionArgs, sortOrder);
    }

    @Override
    public void onLoaderReset(@NonNull Loader<Cursor> loader) {
    }

    @Override
    public void onLoadFinished(@NonNull Loader<Cursor> loader, @NotNull Cursor cursor) {
        @SuppressLint("UseSparseArrays") List<Media> list = new LinkedList<>();
        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndexOrThrow(FileColumns._ID));
            int media = cursor.getInt(cursor.getColumnIndexOrThrow(FileColumns.MEDIA_TYPE));
            Uri uri = Uri.withAppendedPath(this.uri, "" + id);
            list.add(new Media(uri.toString(), media == FileColumns.MEDIA_TYPE_VIDEO));
        }
        cursor.close();
        completedListener.completed(list);
        supportLoaderManager.destroyLoader(loader.getId());
    }
}
}
0
kreker