2017-06-08 3 views
0

5つのフォルダがあり、すべてのフォルダに5つのオーディオファイルが含まれています。誰かがフォルダをクリックすると、そのフォルダからすべてのオーディオファイルが再生されます。 私はアンドロイドを初めて使っています。だから私はそれについて少ししか考えていません。 私はそれをやろうとしましたが、すべてのオーディオファイルが一緒に表示されます。 フォルダを賢明に表示します。希望のフォルダからオーディオファイルを再生する

fun abs(){ 

    var songsURI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 
    var selection = MediaStore.Audio.Media.IS_MUSIC + "!=0" 
    val cursor = contentResolver.query(songsURI,null,selection,null,null) 
    if(cursor!= null) 
    { 
     if (cursor!!.moveToFirst()){ 

      do 
      { 
       var songURL = cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.DATA)) 
         var songAuth =cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.ARTIST)) 
           var SongNAme = cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.TITLE)) 
       listSongs.add(Songinfo(songURL,songAuth,SongNAme)) 

      }while (cursor!!.moveToNext()) 
     } 
     cursor!!.close() 

     adapter = MySongAdapter(listSongs) 
     hello.adapter = adapter 
    } 


} 

コードの下

答えて

1

は、各ディレクトリにあなたの曲のリストを与える助けてください、あなたは、ディレクトリ名や曲のリストを表示するには、アダプタを変更する必要があります。あなたのアダプタを使用して

data class SongInfo(var songURL: String, var songAuth: String, var songNAme: String) 
data class DirInfo(var dir: String, var songInfo: ArrayList<SongInfo>) 

private fun getAudioDirectories(): ArrayList<DirInfo> { 

    var result = ArrayList<DirInfo>() 

    val directories = LinkedHashMap<String, ArrayList<SongInfo>>() 

    val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 
    val selection = MediaStore.Audio.Media.IS_MUSIC + "!=0" 

    val order = MediaStore.Audio.Media.DATE_MODIFIED + " DESC" 

    val cursor = getContentResolver().query(uri, null, selection, null, order) 

    cursor.let { 
     it.moveToFirst() 

     val pathIndex = it.getColumnIndex(MediaStore.Images.Media.DATA) 

     do { 
      val path = it.getString(pathIndex) 

      val file = File(path) 
      if (!file.exists()) { 
       continue 
      } 

      val fileDir = file.getParent() 

      var songURL = it.getString(it.getColumnIndex(MediaStore.Audio.Media.DATA)) 
      var songAuth = it.getString(it.getColumnIndex(MediaStore.Audio.Media.ARTIST)) 
      var songName = it.getString(it.getColumnIndex(MediaStore.Audio.Media.TITLE)) 

      if (directories.containsKey(fileDir)) { 
       var songs = directories.getValue(fileDir); 

       var song = SongInfo(songURL, songAuth, songName) 

       songs.add(song) 

       directories.put(fileDir, songs) 
      } else { 
       var song = SongInfo(songURL, songAuth, songName) 

       var songs = ArrayList<SongInfo>() 
       songs.add(song) 

       directories.put(fileDir, songs) 
      } 
     } while (it.moveToNext()) 


     for (dir in directories) { 
      var dirInfo: DirInfo = DirInfo(dir.key, dir.value); 

      result.add(dirInfo) 
     } 
    } 

    return result 
} 

我々は曲のリストとアルバムのリストを表示することはできません、あなたはthisを使用するかは、答えをAndroid-Arsenal

+0

こんにちはおかげから –

+0

をこれらのLIBSのいずれかを取ることができ、私は問題に直面していますアダプター付き –

+0

私の答えが更新されました。関連する曲リストのあるアルバムのリストを取得するために問題が解決した場合は、私の答えを受け入れてください。 –

関連する問題