Android 当我在mediaplayer中单击listview时,正在播放多首歌曲

Android 当我在mediaplayer中单击listview时,正在播放多首歌曲,android,listview,android-studio,android-mediaplayer,Android,Listview,Android Studio,Android Mediaplayer,你好,我正在创建音乐播放器应用程序 我有一个问题,当我点击listview时,它会播放歌曲 当我再次点击listview时,歌曲正在一起播放 上一首歌没有停止 我关注了很多图坦卡蒙和博客,并给出了答案,但没有任何结果 以下是我的活动,其中包含歌曲列表视图:- public class songlist extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { pr

你好,我正在创建音乐播放器应用程序

我有一个问题,当我点击listview时,它会播放歌曲

当我再次点击listview时,歌曲正在一起播放

上一首歌没有停止

我关注了很多图坦卡蒙和博客,并给出了答案,但没有任何结果

以下是我的活动,其中包含歌曲列表视图:-

public class songlist extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

    private ListView lv_songlist;
    public Cursor cursor;

    private MediaCursorAdapter mediaAdapter = null;
    private String currentFile;

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

        lv_songlist = (ListView) findViewById(R.id.songlist);


        cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

        if (null != cursor)
        {
            cursor.moveToFirst();

            mediaAdapter = new MediaCursorAdapter(this, R.layout.listitem, cursor);



            lv_songlist.setAdapter(mediaAdapter);
            lv_songlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    currentFile = (String) view.getTag();

                    Intent myIntent = new Intent(songlist.this,
                        now_playing.class);
                    myIntent.putExtra("song",""+currentFile);
                    myIntent.putExtra("cursor-position",cursor.getPosition());
                    startActivity(myIntent);
                }
            });
        }

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent myIntent = new Intent(songlist.this,
                    now_playing.class);
                myIntent.putExtra("song","");
                startActivity(myIntent);
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) 
        {
            drawer.closeDrawer(GravityCompat.START);
        } 
        else 
        {
            super.onBackPressed();
        }
    }

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.songlist, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.nav_camera)
        {
        } 
        else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }



    private class MediaCursorAdapter extends SimpleCursorAdapter {

        public MediaCursorAdapter(Context context, int layout, Cursor c) {
            super(context, layout, c,
                new String[]{MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.TITLE, MediaStore.Audio.AudioColumns.DURATION},
                new int[]{R.id.displayname, R.id.title, R.id.duration});
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            TextView title = (TextView) view.findViewById(R.id.title);
            TextView name = (TextView) view.findViewById(R.id.displayname);
            TextView duration = (TextView) view.findViewById(R.id.duration);

            name.setText(cursor.getString(
                cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)));

            title.setText(cursor.getString(
                cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)));

            long durationInMs = Long.parseLong(cursor.getString(
                cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)));

            Duration d = new Duration();

            String durationInMin = d.convertDuration(durationInMs);

            duration.setText("" + durationInMin);

            view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflater = LayoutInflater.from(context);
            View v = inflater.inflate(R.layout.listitem, parent, false);

            bindView(v, context, cursor);

            return v;
        }
    }


    }

我也有同样的问题,并像这样修复。更改您的项目需求

全局声明您的
mediaPlayer
实例

static MediaPlayer mediaPlayer = new MediaPlayer();
创建您的
AudioManager
和音量设置(注意:我使用最大音量播放声音):

然后在单击“播放”按钮时,将此代码放在播放按钮上

        try {

            if (mediaPlayer != null) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.stop();
                }
                mediaPlayer.release();
                mediaPlayer = null;
            }

            mediaPlayer.setDataSource(filePath);
            mediaPlayer.prepare();
            mediaPlayer.start();

        } catch (IOException e) {
            e.printStackTrace();
        }

因为您每次都在活动中创建新的MediaPlayer实例

使用MediaPlayer的单个实例

创建一个singleton类并从中使用MediaPlayer

也可以在ListView活动中将MediaPlayer设置为公共静态

public static MediaPlayer mp = new MediaPlayer();

并在您的now_playing活动中使用此MediaPlayer

无需每次创建新的media player实例,请使用单个实例,当您停止音乐时,还应使用MediaPlayer.release()释放实例;通过将MediaPlayer设置为静态,它现在起作用了。谢谢@Rucha bhatt非常感谢您,先生,在静态的帮助下,它起作用了。
        try {

            if (mediaPlayer != null) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.stop();
                }
                mediaPlayer.release();
                mediaPlayer = null;
            }

            mediaPlayer.setDataSource(filePath);
            mediaPlayer.prepare();
            mediaPlayer.start();

        } catch (IOException e) {
            e.printStackTrace();
        }
public static MediaPlayer mp = new MediaPlayer();