繁体   English   中英

Android Studio 检查 Mediaplayer 是否正在屏幕小部件活动中播放

[英]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 ,因为该类被重新创建或重新执行。 这将清除所有变量并重新定义它们。 这就是你的问题。

解决方案


  1. 只需创建一个类似MediaPlayerHelper.java的类名

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

     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 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM