Как я могу извлечь информацию из выбранного mp3 файла? - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу получить некоторую информацию, такую ​​как исполнитель, продолжительность и название из выбранного 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 голосов
/ 20 декабря 2018

Проблема в том, как вы извлекаете метаданные файла, вы присваиваете значения 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

...