Android 工作室检查 Mediaplayer 是否正在屏幕小部件中播放 activity

Android studio check if Mediaplayer is playing in a screen widget activity

主屏幕上会有一个按钮,可以播放某首歌曲并更改按钮的背景图像。如果用户再次点击按钮(当音乐正在播放时),那么音乐应该停止并且按钮的背景图像应该自动回到一般位置。但看起来该程序无法检测到我的 Mediaplayer 是否正在播放。我在这里错过了什么?

    @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);
        }
    }

当我点击按钮时它应该设置回背景图像并停止音乐,但它只是再次启动媒体播放器并且背景图像保持不变。我不知道如何解决这个问题。好像每次都会创建一个新的媒体播放器

问题


它会创建一个新的 Media Player,因为 class 已重新创建或 re-executed。这将清除所有变量和 re-defines 它们。这使您的情况成为问题。

解决方案


  1. 只需创建一个 class 名称,类似于 MediaPlayerHelper.java

  2. 创建一个 MediaPlayer 的静态变量 public。像这样:

    public static MediaPlayer mp;
    
  3. 现在,当按下按钮时,您可以检查它是否正在播放。像这样:

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

编码愉快