2017-07-12 6 views
0

MediaStoreには、カメラのすべての写真が表示されます。 の写真とデバイスの他のイメージメディア(ダウンロード、スクリーンショットなど)との区別に注意してください。 MediaStoreには、多くの異なるディレクトリまたは「バケット」があり、デフォルトのカメラ/画像の場所がその1つです。しかし、このバケットの名前には何の基準もないようです。私のSony Z5では、Samsung GAPAX S3の「100ANDRO」です。単に「カメラ」です。Androidストアを介して、MediaStoreから写真(カメラ撮影)を一貫して読み込みます。

様々なposts on StackOverflowを読んで、manufactorerによって異なりますようですが、私はだから私はそのパスでMediaStoreにクエリをフィルタすることができ

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) 

で、従来の「カメラフォルダ」へのパスを見つけることができるはずです(例えば、私のS3では/storage/emulated/0/DCIM)。ユーザーが、おそらくサードパーティのカメラアプリを使用して、まったく違った場所に写真を保存することを選択した場合、それは問題ありません。私はここでもっとも "普通の"ユースケースをカバーすることを望んでいます。

しかし、外付けSDカードがあれば、その写真もロードしたいのですが?

私の知る限り見ることができるように、「内部メモリ」の写真・SDカード上のものはMediaStoreに同じBUCKET_DISPLAY_NAME(およびBUCKET_ID)を持つことになります。しかし、のパスをにすることは、デバイス間で非常に難しいと思われます。

だからあなたは(すべての写真を取得するために)このアプローチについてどう思いますか:

  1. は、このパスで濾過

  2. クエリMediaStore、(上記のように)「カメラフォルダ」のパスを見つけます。対応BUCKET_DISPLAY_NAME

  3. クエリが再びMediaStoreは、ステップ2からBUCKET_DISPLAY_NAME上で濾過し、パスが

ステップ2のものと異なるところは、ステップ2のすべての写真を検索します検索内部メモリ。 ステップ3では、SDカードに写真がある場合はそれを検索します。 カードがマウントされていない場合、または写真が含まれていない場合は、ステップ3は空になりますので、と思われるかもしれません。

+0

「SDカードの写真のディレクトリへのパスがデバイス間で非常に難しいようです」 - リムーバブルストレージへのファイルシステムのパスはありません。一般に、リムーバブルストレージへの任意のファイルシステムアクセスはありません。 – CommonsWare

+0

はい。だから私は提案されたアプローチについて、パスを持たないようにするために何を考えていますか? – joakimk

+0

私はそのようなことは何も試していないので、現実にはどれくらいうまくいくか分かりません。 – CommonsWare

答えて

0

は、だから私はそのパスでMediaStoreにクエリをフィルタリングすることができます(たとえば、私のS3上/storage/emulated/0/DCIM)あなたが発見したリンクのコードでそれを達成することができます

、それが最善の解決策は、あなたがよう他の人が言ったように、デバイスのカメラアプリがEnvironment.DIRECTORY_DCIMのディレクトリに実際に写真を保存しているという保証はなく、他のアプリも画像以外の画像を保存することがあるという問題があります。それは公開されているので...

+0

お返事ありがとうございます!私はこれがAndroidでやるのは難しいことだと思います。しかし、明確にするために、ここで私がしたいことがあります。私はデバイス上に画像(好ましくは「写真」)をロードしたいと思います。他の画像も表示されていればOKです。ですから、私はMediaStoreのすべての画像を*表示するだけで、ユーザーが特定のバケツを除外できるようにする必要がありますか? – joakimk

+0

さらに、私が書いているアプリでは、JPEGファイル(メタデータ付き)を更新しています。画像がSDカードにあると、WRITE_EXTERNAL_STORAGE権限を持っていても、私のアプリは「Permission Denied」になります。 SDカードへの書き込み(Android 4.4以降)は、内部メモリへの書き込みとはまったく異なるアプローチが必要であることを理解しています。そのため、内部メモリの画像と外部メモリの画像を区別する方法が必要です。実際には、私はこの複雑さのすべてを期待していませんでしたが、それはすべての課題の一部です:D – joakimk

+0

それは解決する良い方法です、JPEGファイルのみを照会して、更新して欲しい。 – Tharkius

関連する問題