我可以使用以下代码通过 ID 查询歌曲:
Uri mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID};
String selection = MediaStore.Audio.Media._ID + "=?";
String[] selectionArgs = new String[] {"" + id}; //This is the id you are looking for
Cursor mediaCursor = getContentResolver().query(mediaContentUri, projection, selection, selectionArgs, null);
if(mediaCursor.getCount() >= 0) {
mediaCursor.moveToPosition(0);
String title = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String album = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String artist = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
long duration = mediaCursor.getLong(mediaCursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
//Do something with the data
}
您可以通过更改选择和选择参数来查询不同的内容。这是查询函数的文档:
/*
Query the given URI, returning a {@link Cursor} over the result set.
For best performance, the caller should follow these guidelines:
- Provide an explicit projection, to prevent reading data from storage that aren't going to be used.
- Use question mark parameter markers such as 'phone=?' instead of explicit values in the {@code selection} parameter, so that queries that differ only by those values will be recognized as the same for caching purposes.
@param uri The URI, using the content:// scheme, for the content to retrieve.
@param projection A list of which columns to return. Passing null will return all columns, which is inefficient.
@param selection A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given URI.
@param selectionArgs You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings.
@param sortOrder How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
@return A Cursor object, which is positioned before the first entry, or null
@see Cursor
*/
public final Cursor query(Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder)