【问题标题】:How can I retrieve song name and artist name from media如何从媒体中检索歌曲名称和艺术家姓名
【发布时间】:2020-10-27 22:53:48
【问题描述】:

我是 Java 编程新手。我正在创建一个从设备内部存储中获取音乐的音乐播放器。我已经能够成功地检索到音乐文件,你也希望艺术家名和歌曲名显示在正在播放的活动中。

这是代码:

public class PlayerActivity extends AppCompatActivity {

ImageView back_btn;
TextView song_name, artist_name;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
static Uri uri;
int position = -1;
static ArrayList<MusicFiles> listSongs = new ArrayList<>();

@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);
    getInit();
    getIntentMethod();

    song_name.setText(listSongs.get(position).getTitle());
    artist_name.setText(listSongs.get(position).getArtist());

    back_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivities(new Intent[]{intent});

        }
    });
}

//该方法获取歌曲的当前意图位置

private void getIntentMethod() {
    position = getIntent().getIntExtra("position", -1);
    listSongs = musicFiles;
    metaData(uri);

}


// fetch IDs from xml

public void getInit() {
    back_btn = findViewById(R.id.back_btn);
    song_name = findViewById(R.id.song_name);
    artist_name = findViewById(R.id.artist_name);
}

// Meta Data retrieval code //

private void metaData(Uri uri) {
    retriever = new MediaMetadataRetriever();
    retriever.setDataSource(uri.toString()); 
    }
}

【问题讨论】:

标签: android


【解决方案1】:

您可以对数据库使用查询,并像这样获取您想要的所有信息。

    public static ArrayList<Audio> loadAudio(Context context) {
    ContentResolver contentResolver = context.getContentResolver();
    ArrayList<Audio> audioList = new ArrayList<>();
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
    Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);

    if (cursor != null && cursor.getCount() > 0) {
        audioList = new ArrayList<>();
        while (cursor.moveToNext()) {

            String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
            String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
            String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
            String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            String songId = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
            String albumId = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
            String artistId = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));

            // Save to audioList
            audioList.add(new Audio(data, title, album, artist, songId, albumId, artistId));
        }
    }
    assert cursor != null;
    cursor.close();
    return audioList;
}

【讨论】:

  • 当我想从内部存储中检索歌曲时,我已经在我的主要活动中完成了这项工作。我创建了另一个正在播放的活动,但我希望当前歌曲的歌曲名称和艺术家名称显示在我创建的文本视图中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多