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

时间:2018-12-20 14:45:32

标签: android audio kotlin mediastore

我想从选定的mp3文件中获取诸如艺术家,时长和标题之类的信息。但是我似乎出错了。我只是得到一些随机数,而这并不是我所希望的。感谢我所提供的每一个帮助。

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)

      }
  }

}

1 个答案:

答案 0 :(得分:1)

问题出在检索文件元数据的方式上,您正在分配用于提取元数据的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