Home > front end >  Android studio check if Mediaplayer is playing in a screen widget activity
Android studio check if Mediaplayer is playing in a screen widget activity

Time:04-04

There'd be a button on the home screen which would play a certain song and change the background image of the button. If the user clicks on the button again (when the music is playing) then the music should stop and the background image of the button should set itself back to the general position. But it looks like the program can't detect if my Mediaplayer is playing. What am I missing here?

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        AppWidgetManager appWidgetManager= AppWidgetManager.getInstance(context);
        RemoteViews rv= new RemoteViews(context.getPackageName(),
                R.layout.playbtn_widget);
        if (intent.getAction().equals("btnPlay")) {
            if (!mediaPlayer.isPlaying()) {
                mediaPlayer= MediaPlayer.create(context,R.raw.itsmylife);
                mediaPlayer.start();
                rv.setImageViewResource(R.id.imbtnwidget,
                        R.drawable.btnk32);
            } else {
                mediaPlayer.stop();

            }
            mediaPlayer.setOnCompletionListener(mediaPlayer -> {
                rv.setImageViewResource(R.id.imbtnwidget,
                        R.drawable.btnk3);
                appWidgetManager.updateAppWidget(new ComponentName(context,
                        BtnAppWidgetProvider.class), rv);
            });
            appWidgetManager.updateAppWidget(new ComponentName(context,
                    BtnAppWidgetProvider.class), rv);
        }
    }

It should set the background image back and stop the music when I tap on the button, but it just starts the mediaplayer again and the background image remains the same. I have no idea how I could fix this. It seems like it creates a new mediaplayer every single time

CodePudding user response:

Issue


It creates a new Media Player because the class is recreated or re-executed. This clears all the variables and re-defines them. This makes the issue in your case.

Solution


  1. Just create a class name anything like MediaPlayerHelper.java

  2. Create a variable of MediaPlayer which is public and static. Like this:

    public static MediaPlayer mp;
    
  3. Now, when the button is pressed, you can check if it is playing or not. Something like this:

    if(MediaPlayerHelper.mp != null && MediaPlayerHelper.mp.isPlaying()){
       // the media player is currently playing. Stop it.
    }else{
       // the media is not playing. Start it
    }
    

Happy coding

  • Related