2017-11-09 11 views
0

各セルと個々のセルをクリックすると、現在の曲がインデックス0で再生されます。 ListViewアイテムの現在の位置に現在の文字列をフェッチし、それ? enter image description hereリストビュー項目が選択されたインデックスでオーディオを再生していない

任意の提案やヘルプは高く評価され:ここでそれをより明確にするために

は、このコードが何をするかの例です。

コード:

// 
private static final int my_permission = 1; 
    ArrayList<String> arrayList; 
    ListView listView; 
    ArrayAdapter<String> adapter; 
    MediaPlayer mediaPlayer = new MediaPlayer(); 
    Uri songUri; 

    int songLocation; 
    int songArtist; 
    int songTitle; 
    //// 
    String currentLocation; 
    String currentArtist; 
    String currentTitle; 
    // 
    Cursor songCursor; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED){ 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, 
        Manifest.permission.READ_EXTERNAL_STORAGE)) 
      { 
       ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, my_permission); 
      } 
      else 
      { 
       ActivityCompat.requestPermissions(MainActivity.this, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, my_permission); 
      } 
     } 
     else 
     { 
      doStuff(); 
     } 
    } 

    public void doStuff() { 
     listView = (ListView) findViewById(R.id.listView); 
     arrayList = new ArrayList<>(); 
     getMusic(); 
     adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayList); 
     listView.setAdapter(adapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

       Toast.makeText(getApplicationContext(), currentLocation.toString() + " ", Toast.LENGTH_SHORT).show(); 

        mediaPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(currentLocation.toString())); 
        mediaPlayer.start(); 
      } 
     }); 
    } 

    public void getMusic() 
    { 
     ContentResolver contentResolver = getContentResolver(); 
     songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     songCursor = contentResolver.query(songUri, null, null, null, null); 

     if (songCursor != null && songCursor.moveToFirst()) 
     { 
      songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE); 
      songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
      songLocation = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA); 

      do { 
       currentTitle = songCursor.getString(songTitle); // 
       currentArtist = songCursor.getString(songArtist); // 
       currentLocation = songCursor.getString(songLocation); 
       arrayList.add("Title: " + currentTitle + "\n" + "Artist: " + currentArtist + "\n" + "Location: " + currentLocation); 
      } 
      while (songCursor.moveToNext()); 
      { 

      } 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     switch (requestCode){ 
      case my_permission:{ 

       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
       { 
        if (ContextCompat.checkSelfPermission(MainActivity.this, 
          Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
        { 
         Toast.makeText(this, "permission granted", Toast.LENGTH_LONG).show(); 
         doStuff(); 
        } 
       } 
       else 
       { 
        Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show(); 
        finish(); 
       } 
       return; 
      } 
     } 
    } 
} 

} //

答えて

0

は、カーソルが一列のみを参照する場合ので、あなたは、Cursorを通じてContntResolverから音楽パスを取得している

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

       String musicPath = listView.getItemAtPosition(position); 

       Toast.makeText(getApplicationContext(), musicPath + " ", Toast.LENGTH_SHORT).show(); 

        mediaPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(musicPath)); 
        mediaPlayer.start(); 
      } 
     }); 
+0

Dosen'tは動作するようです。しかし、助けてくれてありがとう。 – CoderxZ

0

これを試してみてくださいデータを読み込む前にmoveToFirst()を呼び出して、有効なインデックスにいることを確認することができます。 moveToFirst()とmoveToNext()の両方は、Cursorが最初に作成され、インデックス-1にあるときと同じ効果を持ちます。

ので、ちょうどコーディングハッピーこの

if (songCursor != null && songCursor.moveToFirst()) 
    { 
     songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE); 
     songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
     songLocation = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA); 


     while (songCursor.moveToNext()); 
     { 

      currentTitle = songCursor.getString(songTitle); // 
      currentArtist = songCursor.getString(songArtist); // 
      currentLocation = songCursor.getString(songLocation); 
      arrayList.add("Title: " + currentTitle + "\n" + "Artist: " + 
      currentArtist + "\n" + "Location: " + currentLocation); 
     } 
    } 

を変更!

+0

それは役に立たなかったが、助けてくれてありがとう。 – CoderxZ

関連する問題