当我多次按播放按钮时,我的应用程序崩溃了,我不知道该怎么办。音乐是从Firebase的URL流式传输的。代码中的任何建议将不胜感激。 另外请注意,该按钮基本上是可点击的图像视图,单击后会更改其图像。
我的媒体播放器类顺序是否正确,我不知道,但是当多次单击播放按钮时,它最终使我的应用程序崩溃
ImageView play,download;
TextView name;
MediaPlayer mediaPlayer;
DownloadManager downloadManager;
Boolean nir=true;
DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_info);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final NavigationView navigationView=findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
mediaPlayer = new MediaPlayer();
final int index=getIntent().getIntExtra("audiourl",0);
play=findViewById(R.id.play);
download=findViewById(R.id.download);
name=findViewById(R.id.name);
String url=array_class.arrayurl2.get(index).getUrl();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
name.setText(array_class.arrayurl2.get(index).getName());
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(nir) {
mediaPlayer.stop();
mediaPlayer.reset();
play.setImageResource(R.drawable.pause_white);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
new Player().execute(array_class.arrayurl2.get(index).getUrl());
Toast.makeText(music_info.this, "please wait", Toast.LENGTH_SHORT).show();
nir=false;
}else {
mediaPlayer.stop();
play.setImageResource(R.drawable.play_white);
nir=true;
}
}
});
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadManager=(DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri= Uri.parse(array_class.arrayurl2.get(index).getUrl());
DownloadManager.Request request=new DownloadManager.Request(uri);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setMimeType("audio/MP3");
request.allowScanningByMediaScanner();
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,array_class.arrayurl2.get(index).getName()+".mp3");
request.setTitle(array_class.arrayurl2.get(index).getName());
Long reference=downloadManager.enqueue(request);
}
});
drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle=new ActionBarDrawerToggle(this,drawer,toolbar,
R.string.navigation_drawer_open,R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
setResult(1);
}
@Override
public void onBackPressed() {
mediaPlayer.stop();
if (drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
}else {
finish();
super.onBackPressed();
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.nav_wallpaper:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new fragment_wallpaper())
.commit();
break;
case R.id.nav_ringtone:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new fragment_ringtone())
.commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
public class Player extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
String url=params[0];
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare(); // log is pointing problem is here
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void avoid) {
mediaPlayer.start();
}
@Override
protected void onPreExecute() {
mediaPlayer.stop();
}
}
}
日志
E/MediaPlayerNative: stop called in state 4, mPlayer(0x794ab11fc0)
error (-38, 0)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.napps.wallpaper, PID: 25749
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalStateException
at android.media.MediaPlayer._prepare(Native Method)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1335)
at com.napps.wallpaper.music_info$Player.doInBackground(music_info.java:158)
at com.napps.wallpaper.music_info$Player.doInBackground(music_info.java:146)
at android.os.AsyncTask$2.call(AsyncTask.java:333)