特定のアプリケーションでのみSDカードから読み取られる画像があるので、画像ギャラリーで非表示にしたい。 .nomediaファイルを入れましたが、このファイルは無視され、画像はギャラリーに表示されたままです。 「。」と入れました。初めに。まだ動かない。何か案は?
それまでAndroid 4.0、.nomedia
はそれまで正常に機能していたため、AOSP 問題のバグレポート は次のように説明します。
MediaScanner
on Android 4.0は、.nomedia
ファイルを検出すると、すでにインデックスが作成されたファイルを忘れませんが、最初のパスに存在する場合はそれを受け入れます。したがって、回避策は、単にディレクトリの名前を変更することですが、必要に応じて、次回のスキャン後に名前を元に戻すこともできます。
Update:完全な解決策は、ディレクトリの名前を変更した後で、実際にメディアスキャンを強制することです。私はそれを試していませんが、このような何かがうまくいくはずです:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
Environment.getExternalStorageDirectory())));
ええと...私は推測しているだけだと認めますが、コメントで+1を受け取ったので、答えとして渦巻きを付けます。これは独自のアプリなので、画像ファイルの拡張子を完全に一意の「.myimagefile」などに変更し、それがAndroidから隠されているかどうかを確認します。一方、あなたは自分のアプリにどのファイルをロードするか、そしてそれらを保存する方法を知っています。
.nomediaバグは正しく、既存の画像フォルダに追加できます。
.nomediaファイルを作成した後、フォルダーの名前を変更してギャラリーを強制的に再インデックス化し、ギャラリーを実行して(「非表示のフォルダーはなくなっているはずです」)、フォルダーの名前を目的の名前に戻します。非表示のままにしておく必要があります。
携帯電話で確実に機能するようにもう一度やり直しました。 Android 4.0.4。
これが私が見つけたものです:
ただし、その方法に少し変更を加えます。
SDCardを再スキャンし、.nomediaファイルを含むすべてのディレクトリをこの時点で無視する必要があります。
私のメモリカードには、メディアスキャナーを圧倒する数千枚の写真があります。次に、私のメモリカードのルートフォルダで、「RootFolder」から「.RootFolder」に名前を変更しました
隠しディレクトリになり、さらに.nomediaを使用しない
これを試して。
Samsung Galaxy Note 2のMedia Storage 4.1.1では、上記のトリックは完全には機能しません。つまり、.nomediaファイルを含むディレクトリはまだスキャンされているため、バッテリーを大量に消費する可能性があります(ただし、ギャラリー)、および「。」で始まる名前のディレクトリまだスキャンされています:-(
私は「メディアスキャナールート」アプリを使用することに頼りました。これは明らかに次のようなものによって達成されます
午後無効com.Android.providers.media/com.Android.providers.media.MediaScannerReceiver
ところで、Media Storageアプリ自体を無効化/フリーズすると、着信音と通知の選択とバインドが機能しなくなるという悪影響があります(すばらしいデザインです)。ただし、スキャナーコンポーネントを無効化するだけで、たとえば次のように使用できます。トーンを選択するためのESファイルエクスプローラー。
.nomedia
ファイルは、(Android 4.0)の)治癒的ではなく予防的なものであり、バグです。.nomedia
ファイルがあり、画像がすでにその中にある場合、ギャラリーは引き続き画像を検索します。
.nomedia
ファイルを作成する必要がありますbeforeファイルをそこに配置します。
編集:ドットで始まるすべてのフォルダはスキャンされません(非表示のため)。
ギャラリーはそれほど頻繁には更新されず、一部のサムネイルがまだ表示されています。このためには、次のコードで電話を再起動するか、ギャラリーをプログラムで更新する必要があります。
/**
* This method is must to reflect changes on gallery, if some file is
* deleted or moved, <b> no updation is shown on gallery till phone is
* rebooted </b> or <i>till this method UpdateGallery(Activity activity) is
* called</i> UpdateGallery
*/
public static void UpdateGallery(Activity activity) {
activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
.parse("file://" + Environment.getExternalStorageDirectory())));
}
APK拡張Zipライブラリ(APIレベル5以上が必要)を使用して、Zipアーカイブの一部としてSDカードにインストールするファイルを読み取ることを検討する場合があります。このライブラリの説明はここにあります:
http://developer.Android.com/guide/market/expansion-files.html#ZipLib
おそらく、SDカードのZipアーカイブに保存されているファイルは、ギャラリーに表示されません。
さらに、ifアプリがから読み取った画像があります(ただしSDカードを書き込みせず、それは自分のアプリでのみ使用可能であり、アプリのインストールまたは更新時に配信される可能性がありますの場合、新しいGoogle Play機能を利用して、インストール時にアプリのpartとして組み込むことが理にかなっています。
画像が大きすぎてAPKファイルに収まらないため、SDカードに画像を保存していると思います(50 MBのサイズ制限があることを前提としています。これは、バッファリングの問題により、実際には特定のデバイスよりも小さいサイズです)。
その場合は、2012年3月5日の時点で、Google Playがそれぞれ2ギガバイトまでの2つまでの「拡張ファイル」の(アプリへの)添付をサポートしていると考えるかもしれません。 APKの最大容量は50 MBですが、拡張ファイルにより、使用可能な合計ストレージが4 GBを超えます。これらの拡張ファイルはGoogleによって提供され、アプリに固有の特定のSDカードフォルダーに保持され、ダウンローダーライブラリが提供するAPIを使用してアクセスできます(APIレベル5以上が必要です)。
この変更に関するGoogleの発表は次のとおりです。
http://Android-developers.blogspot.in/2012/03/Android-apps-break-50mb-barrier.html
そしてここに施設の詳細な説明があります:
http://developer.Android.com/guide/market/expansion-files.html
この機能は新しいものですが、ライブラリはAndroid SDKで提供されており、以前のAPIレベルで使用できます。たとえば、私のインストールでは、API-8バージョンがここにあります。
<Android SDK base folder>\extras\google\play_apk_expansion\
同じフォルダーのZip_fileサブフォルダーに、前述のAPK拡張Zipライブラリが含まれています。
私自身はこの機能をまだ個人的に使用していないため、引用文献のみに基づいてこれを説明しています。