我的音频播放器应用程序中正在播放多首歌曲



我使用列表视图在 android 工作室中创建了一个音频播放器应用程序,该应用程序运行良好,但是当我播放另一首歌曲时,前一首歌曲不会停止并继续播放。

package com.russvkm.audioplayer;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayList<String> arrayList;
ArrayAdapter<String> arrayAdapter;
MediaPlayer mediaPlayer=new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.listView);
arrayList=new ArrayList<>();
arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1,arrayList);
getSong();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
stopPlaying();
mediaPlayer=new MediaPlayer();
playMedia(position);
}
});
if(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_EXTERNAL_STORAGE)){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}else{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
}
public void getSong(){
Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

String selection=MediaStore.Audio.Media.IS_MUSIC;
Cursor cursor=getContentResolver().query(uri,null,selection,null,null);
if(cursor!=null) {
if (cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
final String songUrl = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
final playerdata player = new playerdata(songUrl, name);
arrayList.add(songUrl);
listView.setAdapter(arrayAdapter);
} while (cursor.moveToNext());
cursor.close();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1){
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
}
}
}
public void playMedia(int number){
String path = String.valueOf(listView.getItemAtPosition(number));
Toast.makeText(MainActivity.this, path, Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse(path);
try {
mediaPlayer.setDataSource(getApplicationContext(),uri);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
if(mediaPlayer!=null) {
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp != null) {
mp.start();
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopPlaying() {
if (mediaplayer != null) {
mediaplayer.stop();
mediaplayer.release();
mediaplayer = null
}
}
}

在开始新歌曲之前,您必须停止播放以前的歌曲

private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null
}
}

因此,只需在播放新歌曲之前调用上述方法即可。

一旦你播放了一首歌,就初始化你的播放器

mp=new MediaPlayer();

在 yor 适配器中实现 onTrackChangeListener

最新更新