从MediaStore.Audio.Media中选择多个歌曲ID

时间:2015-10-09 18:07:41

标签: android android-mediaplayer

我使用以下

创建了getContentResolver().query
 uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            String projection[] = { android.provider.MediaStore.Audio.Media.DATA,
                    android.provider.MediaStore.Audio.Media.TITLE,
                    android.provider.MediaStore.Audio.Media.ARTIST,
                    android.provider.MediaStore.Audio.Media.ALBUM,
                    android.provider.MediaStore.Audio.Media.COMPOSER,
                    android.provider.MediaStore.Audio.Media.DURATION,
                    MediaStore.Audio.Media._ID,
                    android.provider.MediaStore.Audio.Media.ALBUM_ID };
                    String selection1 = MediaStore.Audio.Media._ID + "=?" ;
                    String[] selectionArgs = new String[] {"" + 19};
                    cursor = this.getContentResolver().query(uri, projection,
                    selection1, selectionArgs, null);
                    songs = new ArrayList<String>();
                    while (cursor.moveToNext()) { 
                    songs.add(cursor.getString(1)); 

这适用于选择单首歌曲,但是当我尝试使用

选择多首歌曲时
String selection1 = MediaStore.Audio.Media._ID + "IN(?,?)";
String[] selectionArgs = new String[] {"" + 12,"" + 19};

此查询失败。

是否有正确的方法来选择多首歌曲,上述查询有什么问题。 请解释需要进行的更改。

2 个答案:

答案 0 :(得分:0)

我没有看到使用 IN 运算符的查询有任何问题。我怀疑IN的查询有怪癖和局限性。但是我没有使用它。请尝试使用 OR 运算符。 例如:

String selection1 = MediaStore.Audio.Media._ID + "=12" + " OR " + MediaStore.Audio.Media._ID + "=19";

当然不要使用selectionArgs作为参数。

答案 1 :(得分:0)

另一个不错的尝试是使用原始查询代替文档@ SQL rawQuery。使用原始查询,您可以使用 IN 运算符,我认为这对于简化查询是一个好主意。我下次应该用它。

感谢您提出这个问题!