SDカード上のすべてのビデオをリストするファイルブラウザを備えたビデオプレーヤーアプリがあります
i want get audio files in sd card に触発されたコード
ContentResolver を使用すると、期待どおりに動作しますが、カード上のファイルが変更された場合に更新されません。自動的にという意味ではありませんが、ビュー/アプリの再起動後です。アプリケーションを再インストールしても役に立ちませんでしたが、同じファイルが表示されます。削除されたビデオ ファイルは、PC 経由で見ることも、再生することもできません (このビデオは再生できません (翻訳))。
データをダンプしましたが、問題はビューのキャッシュなどではありません。私は独自のキャッシングを実装しておらず、問題について何も見つけられませんでした。ありがとうございました
コード:
// acquisition
String[] projection = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.DATA
};
ContentResolver resolver = getActivity().getContentResolver();
Cursor videoCursor = resolver.query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
null
);
// extraction
while(cursor.moveToNext()) {
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
filepath = cursor.getString(cursorIndex);
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
filename = cursor.getString(cursorIndex);
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
duration = cursor.getString(cursorIndex);
result[ index++ ] = new VideoFileMetadata(filename, duration, filepath);
}
編集 1 [2013 年 3 月 14 日]:
潜在的なクエリ キャッシング バスターとして機能するように ORDER または WHERE 句に追加しようとしnumber + " = " + number
ましたが、効果はありませんでした (ただし、オプティマイザによって不要な句として削除された可能性があります)。今回は、別のマシンから別の証明書を使用してアプリケーションを再インストールしましたが、クエリの結果は同じままで、現在存在しないファイルがリストされていました。