使用通知样式,您只需使用新样式重新创建新通知即可更改它。它需要小眨眼(如刷新)。但有效。
第一步将您的对象设为公共静态。
例子 :
public static NotificationCompat.Builder mBuilder;
public static RemoteViews contentBigCustom;
public static RemoteViews contentSmallNotExpand;
public static RemoteViews contentBigCustomFROMCODE;
下一步 - 制作这一行:
notification.contentView = contentBigCustom;
看起来像:
// in top
public static RemoteViews contentAny;
也许您正在使用 onStartCommand 来初始化对象...
if (IWANTNOTIFYSTYLE == 0) {
contentBigCustom = RemoteViews(this.getPackageName(),R.layout.notificationBig);
}
else {
contentBigCustomFROMCODE = RemoteViews(this.getPackageName(),R.layout.notificationBig);
}
contentSmallNotExpand = RemoteViews(this.getPackageName(),R.layout.notificationSmall);
contentBigCustomFROMCODE = RemoteViews(this.getPackageName(),R.layout.notificationBig);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setDefaults(Notification.DEFAULT_ALL);
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
mBuilder.setSmallIcon(R.drawable.play);
mBuilder.setContentText("This text is not in function but its needed to create notify");
mBuilder.setLargeIcon(icon);
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setContent(contentSmallNotExpand);
mBuilder.setCustomBigContentView(contentBigCustom);
After notify exe line :
mNotificationManager.notify(0, mBuilder.build());
put :
stopSelf()
太杀服务了。当您想更改样式时,请重新启动服务并为样式 1 2 .. n 放置操作 ID。它看起来像刷新,因为我们重新创建了新的通知栏。这只是目前 100% 的方法!如果有人认为不同,请发给我应用示例的链接。
您可以使 Activity 对象也 public static 。
现在很容易控制任何组合:
服务 - 活动 服务 - 广播接收器 广播接收器 - 活动
但!:
Service1.contentNotify.setImageViewResource(R.id.NOTYFY_BTN, R.drawable.stop);
...
setImageViewResource 不能将此行用于通知或任何其他样式更改方法。
唯一的方法是创建服务,放入 startCommand CREATE_NOTIFY() 从意图操作名称中查找您要加载的 notify.xml。通知构建并添加关闭服务后,然后从广播调用:
Intent serviceIntent = new Intent("WITHSTOP");
serviceIntent.putExtra("WITHSTOP", "1");
// must be MyApp extend Application reason : from broadcaster you cant access getContext and startService etc.
MyApp.getInstance().startService(serviceIntent);
好像 :
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext(){
return instance;
// or return instance.getApplicationContext();
}
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
}
...