android - 是否有我的音乐播放器通知暂停和播放按钮不起作用但音乐停止并在主要活动中播放
问题描述
我正在创建音乐播放器所有功能工作正常但我的通知栏播放和暂停按钮当我按下通知暂停按钮但音乐停止并再次单击通知暂停按钮然后也开始音乐但不更改按钮时没有改变
通知代码
public static void customBigNotification(Context context, String sname){
RemoteViews expandView=new RemoteViews(context.getPackageName(), R.layout.status_bar_expanded);
expandView.setTextViewText(R.id.status_bar_track_name,sname);
NotificationCompat.Builder nc=new NotificationCompat.Builder(context,CHANNEL_ID);
NotificationManager nm=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notifyIntent=new Intent(context,Player.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, notifyIntent, 0);
nc.setContentIntent(pendingIntent);
nc.setSmallIcon(R.drawable.apollo_holo_dark_play);
nc.setAutoCancel(true);
nc.setPriority(NotificationCompat.PRIORITY_MAX);
nc.setOnlyAlertOnce(true);
nc.setDefaults(NotificationCompat.PRIORITY_MAX);
nc.setVibrate(new long[]{00});
nc.setContentTitle("Music Player");
nc.setContentText("Audio Control");
//nc.addAction(R.drawable.ic_pause_status,"pause",pendingIntent);
//nc.setStyle(new NotificationCompat.DecoratedCustomViewStyle());
nc.setCustomBigContentView(expandView);
setListners(expandView,context);
nm.notify(NOTIFICATION_ID_OPEN_ACTIVITY,nc.build());
}
private static void setListners(RemoteViews view,Context context){
Intent previous=new Intent(NOTIFY_PREVIOUS);
Intent next=new Intent(NOTIFY_NEXT);
Intent play=new Intent(NOTIFY_PLAY);
Intent pause=new Intent(NOTIFY_PAUSE);
PendingIntent pPrevious=PendingIntent.getBroadcast(context, 0, previous, PendingIntent.FLAG_UPDATE_CURRENT);
view.setOnClickPendingIntent(R.id.status_bar_prev,pPrevious);
view.setViewVisibility(R.id.status_bar_play, 1);
PendingIntent pNext=PendingIntent.getBroadcast(context,0,next,PendingIntent.FLAG_UPDATE_CURRENT);
view.setOnClickPendingIntent(R.id.status_bar_next,pNext);
PendingIntent pPause=PendingIntent.getBroadcast(context,0,pause,PendingIntent.FLAG_UPDATE_CURRENT);
//view.setImageViewResource(R.id.status_bar_play,R.id.status_bar_play);
view.setOnClickPendingIntent(R.id.status_bar_pause,pPause);
view.setImageViewResource(R.id.status_bar_pause,R.drawable.ic_play_status);
view.setViewVisibility(R.id.status_bar_pause,View.GONE);
//view.setViewVisibility(R.id.status_bar_pause,View.VISIBLE);
//view.setViewVisibility(R.id.status_bar_play,View.GONE);
PendingIntent pPlay=PendingIntent.getBroadcast(context,1,play,PendingIntent.FLAG_UPDATE_CURRENT);
view.setOnClickPendingIntent(R.id.status_bar_play,pPlay);
view.setViewVisibility(R.id.status_bar_play,View.VISIBLE);
//view.setViewVisibility(R.id.status_bar_prev,View.VISIBLE);
}
通知接收器类
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager manger=(NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);
if(intent.getAction().equals(NotificationGenerator.NOTIFY_PLAY)){
Intent playintent=new Intent();
playintent.setAction("play");
playintent.putExtra("playing",NotificationGenerator.NOTIFY_PLAY);
context.sendBroadcast(playintent);
}
else if(intent.getAction().equals(NotificationGenerator.NOTIFY_PAUSE)) {
Toast.makeText(context, "Pause", Toast.LENGTH_LONG).show();
}else if(intent.getAction().equals(NotificationGenerator.NOTIFY_NEXT)) {
Intent nextintent=new Intent();
nextintent.setAction("next");
nextintent.putExtra("nexting",NotificationGenerator.NOTIFY_NEXT);
context.sendBroadcast(nextintent);
}else if(intent.getAction().equals(NotificationGenerator.NOTIFY_PREVIOUS)) {
Toast.makeText(context, "Previous", Toast.LENGTH_LONG).show();
}
}
}
Player.java 类
IntentFilter filter=new IntentFilter();
filter.addAction("play");
//filternext.addAction("next");
reciver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent !=null){
// if(intent.getStringExtra("play").equals("play")){
play();
remoteViews.setImageViewResource(R.drawable.ic_play_status,R.drawable.ic_pause_status);
remoteViews.setViewVisibility(R.id.status_bar_play,View.VISIBLE);
}
}
};
registerReceiver(reciver,filter);
IntentFilter filternext=new IntentFilter();
filternext.addAction("next");
reciver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent!=null){
next();
}
}
};
registerReceiver(reciver,filternext);
这是我的代码播放和暂停工作,但在通知栏中不更改播放和暂停按钮的图标
解决方案
现在我明白了这个问题,你不能仅仅通过这样做来影响通知
remoteViews.setImageViewResource(R.drawable.ic_play_status,R.drawable.ic_pause_status);
remoteViews.setViewVisibility(R.id.status_bar_play,View.VISIBLE);
您需要再次构建通知: 更新通知
推荐阅读
- java - 第 K 个元素在最小堆上的最佳性能?
- python - 如何将熊猫数据框合并到具有更多列的数据框,同时用相应的值填充空列?
- python - KeyError:“在轴中找不到 ['Close']”
- python - 日期时间格式不正确 'YYYY-MM-DDThh:mm:ss.sssZ'
- python - 如何使用 NaN 元素在 pandas 数据框中执行 int 操作
- matplotlib - 带有 QuTip Bloch 球的子图
- python - 无法在 DataFrame 中按名称选择列
- swift - NSAttributedString 不服从foregroundColor
- python - 我如何绘制单层感知器算法的 3d 决策边界?
- javascript - 这是检测反应组件中第一次渲染的正确方法