5

私のアプリケーションは、DownloadManager を使用して Web サイトから jpg をダウンロードし、/sdcard/Android/name.app/ ディレクトリに保存して、アプリケーションのいくつかのフラグメントで使用します。ダウンロードは問題なく動作しますが、jpg はギャラリー アプリケーションに表示されます。これらはアプリケーションの単なるアセットであるため、これは望ましくありません。ギャラリー アプリケーションに表示されないようにする方法がわかりません。作成されたディレクトリに .nomedia ファイルを追加しようとしました。どんな助けでも大歓迎です!

    DownloadManager myDownloadManager = (DownloadManager) myActivity.getSystemService(Context.DOWNLOAD_SERVICE);
    Request myRequest = new Request(Uri.parse(episodeArtLink));
    myRequest.setNotificationVisibility(Request.VISIBILITY_HIDDEN);
    myRequest.setVisibleInDownloadsUi(false);
    myRequest.setDestinationInExternalFilesDir(myActivity, Environment.DIRECTORY_DOWNLOADS, myFilename);
    myDownloadManager.enqueue(myRequest);

MediaScanner が画像をシステム データベースに追加しているため、要求していないにもかかわらず、問題が発生しているようです。

問題を示すテストアプリを作成しました。[ダウンロード] ボタンをクリックすると、Google ロゴがアプリに表示されます。ギャラリー アプリに移動すると、ダウンロードという名前のギャラリーにも Google ロゴが表示されます。[設定] -> [アプリ] に移動し、ギャラリーとメディア ストレージのデータを消去すると、ファイルが /sdcard/Android/data/ の下にあり、 .nomedia ファイル。/sdcard/Android/data/com.example.downloadmanagertest/files/Download/ に移動して、イメージがまだ電話にあることを確認できます。再起動後も、ギャラリーとメディア ストレージのデータを消去すると、画像がギャラリーに表示されません。4.2.2 を実行している Nexus 4 と Nexus 7 の両方でこれをテストしました。

ソース: https://dl.dropboxusercontent.com/u/114414/DownloadManagerTest.zip

4

5 に答える 5

2

私は数日間この同じ問題に直面しています。隠しディレクトリの作成、さまざまな拡張子の使用、ルートおよびイメージ ディレクトリ ディレクトリへ.nomediaのファイルの配置、ダウンロード前の作成、ディレクトリの名前変更 (前後)のほぼすべての組み合わせを試しました。.nomedia

残念ながら、これらのどれも(Nexus 4では)うまくいかないようです。私の理解では、MediaScanner は電話の起動時または外部ストレージのマウント時にのみ再スキャンを行います。Nexus 4 (または SD カード スロットを持たないデバイス) では、このマウントは起動時にのみ行われます。

ただし、Android Download Managerでダウンロードされたファイルはすぐにスキャンされ (スキャンされるべきではありませんが)、ギャラリーに配置されます。ファイルを持っていて.nomediaも、ギャラリーで終わります。サムネイルはまだキャッシュされているため、アプリをアンインストールしても役に立ちません (キャッシュ、データをクリアし、設定でギャラリーとメディア ストレージ アプリを強制終了することで、再起動せずに削除できます)。電話を再起動すると、Android は外部ストレージを再スキャンし、.nomediaファイルがあることを確認して、ギャラリーから削除します。

したがって、この再起動/再スキャンで問題が修正されます。ただし、ユーザーに携帯電話の再起動を常に求めたくないので、代わりに、ダウンロードが成功した後に Android に外部ストレージを強制的に再スキャンさせることができました。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +  Environment.getExternalStorageDirectory())));

同様の質問に対するDarshan の回答とJonから得たものです。

完了したダウンロードをリッスンするようにブロードキャスト レシーバーをセットアップし、ダウンロードが成功した場合はブロードキャストを送信します。動作しているようです - アプリにダウンロードした画像がギャラリーに表示されなくなりました。

于 2013-06-26T16:54:07.453 に答える
1

また、ファイル拡張子を変更せずに、フォルダ全体をスキャナの影響を受けないようにすることもできます。このリンクの「.nomedia」ファイルを参照してください。

メディア スキャナからファイルを隠す

外部ファイル ディレクトリに .nomedia という名前の空のファイルを含めます (ファイル名のドット プレフィックスに注意してください)。これにより、メディア スキャナーがメディア ファイルを読み取り、MediaStore コンテンツ プロバイダーを介して他のアプリに提供することを防ぎます。ただし、ファイルがアプリに対して完全に非公開の場合は、それらを app-private ディレクトリに保存する必要があります。

于 2016-05-02T15:05:35.157 に答える
0

フォルダー名の前にドットを付けます (/sdcard/Android/name.app/.photos/)。それでもうまくいかない場合は、フォルダーを非表示にしてみてください。

于 2013-05-06T08:04:55.380 に答える