当我点击每个单独的单元格时,它会在索引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 :(得分:0)
试试这个
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();
}
});
答案 1 :(得分:0)
您正在从ContntResolver
到Cursor
获取音乐路径,因此如果您的Cursor仅引用一行,您可以在读取数据之前调用moveToFirst()以确保您使用的是有效索引。当第一次创建Cursor并且索引为-1时,moveToFirst()和moveToNext()都具有相同的效果。
所以只需改变这个
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);
}
}
快乐的编码!!