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 它们。这使您的情况成为问题。
解决方案
只需创建一个 class 名称,类似于 MediaPlayerHelper.java
创建一个 MediaPlayer
的静态变量 public。像这样:
public static MediaPlayer mp;
现在,当按下按钮时,您可以检查它是否正在播放。像这样:
if(MediaPlayerHelper.mp != null && MediaPlayerHelper.mp.isPlaying()){
// the media player is currently playing. Stop it.
}else{
// the media is not playing. Start it
}
编码愉快
主屏幕上会有一个按钮,可以播放某首歌曲并更改按钮的背景图像。如果用户再次点击按钮(当音乐正在播放时),那么音乐应该停止并且按钮的背景图像应该自动回到一般位置。但看起来该程序无法检测到我的 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 它们。这使您的情况成为问题。
解决方案
只需创建一个 class 名称,类似于
MediaPlayerHelper.java
创建一个
MediaPlayer
的静态变量 public。像这样:public static MediaPlayer mp;
现在,当按下按钮时,您可以检查它是否正在播放。像这样:
if(MediaPlayerHelper.mp != null && MediaPlayerHelper.mp.isPlaying()){ // the media player is currently playing. Stop it. }else{ // the media is not playing. Start it }
编码愉快