2012-01-11 5 views
1

プロバイダのMediaStore.Images.ImageColumnsとMediaStore.Video.VideoColumnsのすべてのイメージとビデオを一時的に昇順で取得できますか?Android - 時間的順序でイメージとビデオを取得

より正確に説明すると、各タプルのID、日付、名前、緯度、経度、パス、mimeType、dataの各属性を含むすべての動画と画像のリストが必要です。

しかし、これらの情報は、MediaStore.MediaColumns、Images.ImageColumns、およびMediaStore.Video.VideoColumnsというメディアの種類ごとに1つずつ、3つのテーブルに分かれています。

1つのクエリで可能ですか?

解決策は、MediaStore.MediaColumnsテーブルのidを時間的に上位の順序で照会し、取得したIDごとに特定のテーブルでmimetypeに応じて1つのクエリを実行することだと思います。MediaStore画像の場合は.Images.ImageColumns、動画の場合はMediaStore.Video.VideoColumns ...

時間的に上位の順序が重要です。最初に画像を照会し、ビデオを照会するソリューションは便利ではないでしょう...私は両方のリスト結果を分類したくありません...

ありがとうございました!

答えて

1

通常、私は次の例のようにUNION操作を使用することができことをお勧め:

select _id, date_modified, _display_name, latitude, longitude, _data, mime_type from video UNION ALL select _id, date_modified, _display_name, latitude, longitude, _data, mime_type from images ORDER BY date_modified ASC; 

このクエリは、両方のテーブルからすべての動画や画像のリストを返し、結果がDATE_MODIFIEDでソートされます。しかし、AndroidのContentResolverのクエリAPIは、本格的なSQL要求に対して正確には設計されていません。したがって、私はこの複合要求をコンテンツリゾルバのクエリ関数にどのように適合させるかについてはわかりません。

だから、Images.Media.EXTERNAL_CONTENT_URIとVideo.Media.EXTERNAL_CONTENT_URIの別々のクエリを実行し、結果を照合して照合する必要があると思います。

+0

"androidのContentResolverのクエリAPIが本格的なSQLリクエスト用に設計されていない"と言えば、それはうまくいかないということですか?お勧めしませんか?他のソリューションよりも遅くなるでしょうか? – shem

+0

@shem私が言っていることは、単に "本当の" /生のSQLクエリをContentResolverに "クエリ"メソッドで渡すことができないということです。これは、メソッドのシグネチャによってSQLスタイルをある程度模倣します。しかし、私が答えてくれたその複合的な要求をしてみてください。 "ContentResolver.query()"への1回の呼び出しで、2つの異なるテーブルから2つの "select"ブロックをどのように配置しますか?それは私が話していることです。 –

関連する問題