如何从选定的 mp3 文件中提取信息?

How can I extract Info from an selected mp3 file?

我想从选定的 mp3 中获取艺术家、持续时间和标题等信息 file.But 我好像弄错了。我只是得到一些随机数,这不是我所希望的。我感谢我得到的每一个帮助。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_add_music)
    SelectTrack()
}




private fun SelectTrack() {

   val intent = Intent(Intent.ACTION_GET_CONTENT)
   intent.type = "audio/mpeg"
   startActivityForResult(intent, 0)

}

var selectedTrackUri: Uri? = null


  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
      super.onActivityResult(requestCode, resultCode, data)

      if (requestCode == 0 && resultCode == Activity.RESULT_OK && data !=null) {

          selectedTrackUri = data.data



         val title =  MediaMetadataRetriever.METADATA_KEY_TITLE.toString()
         val duration = MediaMetadataRetriever.METADATA_KEY_DURATION.toString()
         val artist = MediaMetadataRetriever.METADATA_KEY_ARTIST.toString()

         AddTrackName_txt.text = title
         AddArtistName_txt.text = artist
         AddTrackLength_txt.text = duration
         //Picasso.get().load(album).into(AddTrackPic_View)

      }
  }

}

问题在于您检索文件元数据的方式,您正在分配用于提取元数据的 keys 的值,而不是从 MediaMetadataRetriever 中读取实际数据。

例子

private fun selectTrack() {
    val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "audio/mpeg" }
    startActivityForResult(intent, RC_MEDIA_FILE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
    super.onActivityResult(requestCode, resultCode, intent)

    if (requestCode == RC_MEDIA_FILE && resultCode == Activity.RESULT_OK && intent != null) {
        val mmr = MediaMetadataRetriever()
        mmr.setDataSource(this, intent.data)

        val title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)
        val artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)
        val duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)

        Log.d("MP3", "title=$title, artist=$artist, duration=$duration")
    }
}

companion object {
    const val RC_MEDIA_FILE = 100
}

输出

D/MP3: title=Sweet Child O´Mine, artist=Guns N' Roses, duration=356444