流音乐时媒体播放器按钮崩溃

时间:2020-06-08 16:06:39

标签: java android android-mediaplayer

当我多次按播放按钮时,我的应用程序崩溃了,我不知道该怎么办。音乐是从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)

0 个答案:

没有答案