Android 当我在mediaplayer中单击listview时,正在播放多首歌曲
你好,我正在创建音乐播放器应用程序 我有一个问题,当我点击listview时,它会播放歌曲 当我再次点击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
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();