如果您有歌曲ID,Android从Media Store获得歌曲? [英] Android get song from Media Store if you have the song ID?

查看:232
本文介绍了如果您有歌曲ID,Android从Media Store获得歌曲?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从MediaStore的播放列表中获得了歌曲ID,使用

I got a song id from a playlist in MediaStore, using

long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));

且ID是正确的,但由于只有其他可用的数据是CONTENT_DIRECTORY,DEFAULT_SORT_ORDER,PLAYLIST_ID,PLAY_ORDER ,和_ID,我不知道如何获得歌曲的重要部分。我需要标题,专辑,艺术家等,好像我正在通过MediaStore.Audio.Media来获取歌曲信息。

and the id is correct, but as the only other data available is CONTENT_DIRECTORY, DEFAULT_SORT_ORDER, PLAYLIST_ID, PLAY_ORDER, and _ID, I am not sure how to get the important parts of the song. I need the title, album, artist, etc., as if I was going through MediaStore.Audio.Media to get Song info.

我发现一个答案,我试过修改以适应我的需要,但我不真正理解查询或游标,我不知道如何有一种方法来获得歌曲。

I found an answer that I tried to modify to fit my needs, but I don't really understand querying or cursors, I am not sure how if there is a way to get a song.

如果只有这样做是循环通过每一首歌,直到我找到一个匹配的ID我可以做到,但它是非常低效的,有一个更好的方法。

If the only way to do this is to cycle through every single song until i find a matching ID i can do that, but it is wildly inefficient and there has to be a better way.

提前感谢!

推荐答案

我可以使用下面的ID查询歌曲代码:

I was able to query a song by ID using the following code:

    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
    }

可以通过更改selection和selectionArgs来查询不同的东西。这是查询函数的文档:

You can query for different things by changing the selection and selectionArgs. Here is the documentation from the query function:

  /* 
  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)

这篇关于如果您有歌曲ID,Android从Media Store获得歌曲?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆