Android.content.CursorLoader
クラスを使用して2つのCursor
オブジェクトを作成し、アプリのデバイスのユーザーに保存されているメディアにアクセスしています。 Androidギャラリーアプリからの順序を維持する、保存された画像とビデオのグリッドビューをユーザーに提供したい.
現在、1つのCursor
を使用して画像にアクセスし、もう1つを使用してビデオにアクセスしています。このアプローチでは、すべての画像がすべての動画に先行します(つまり、2つの別々のグループに属します)。同じCursor
から画像とビデオの両方にアクセスする方法はありますか?そうでない場合、デバイス上のこれらのメディアにアクセスするためのより良い方法はありますか?
参考までに、私が使用しているコードは次のとおりです。
画像の場合:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
IMAGE_PROJECTION,
null,
null,
MediaStore.Images.Media._ID + " desc"
);
mImageCursor = cursorLoader.loadInBackground();
そしてビデオ:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
VIDEO_PROJECTION,
null,
null,
MediaStore.Video.Media._ID + " desc"
);
mVideoCursor = cursorLoader.loadInBackground();
たくさんの調査とソースコードの操作を経て、ようやくAndroidファイルシステムに慣れました。両方の情報にアクセスできる単一のCursor
を取得するにはImages
およびVideo
以下を使用しました:
// Get relevant columns for use later.
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.DATE_ADDED,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Files.FileColumns.MIME_TYPE,
MediaStore.Files.FileColumns.TITLE
};
// Return only video and image metadata.
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
+ " OR "
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
Uri queryUri = MediaStore.Files.getContentUri("external");
CursorLoader cursorLoader = new CursorLoader(
this,
queryUri,
projection,
selection,
null, // Selection args (none).
MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order.
);
Cursor cursor = cursorLoader.loadInBackground();