首页 > 解决方案 > 我的音频播放器应用程序中正在播放多首歌曲

问题描述

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

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
        }
}

}

标签: javaandroidandroid-mediaplayer

解决方案


在你的适配器中实现 onTrackChangeListener


推荐阅读