在android应用程序中,调用onResume方法时清除状态栏中的小图标
Posted
技术标签:
【中文标题】在android应用程序中,调用onResume方法时清除状态栏中的小图标【英文标题】:In android app, Clear small icon in status bar when onResume method is called 【发布时间】:2013-11-04 09:00:33 【问题描述】:我正在开发带有推送通知的 android 应用程序。
我想在调用 onResume 方法时清除推送通知出现的状态栏中的小图标。
然后,我写了下面的代码,但是效果不好。
※※PushHandlerActivity.java
@Override
public void onResume()
super.onResume();
GCMIntentService.cancelNotification(this);
finish();
※※GCMIntentService.java
public class GCMIntentService extends GCMBaseIntentService
public static final int NOTIFICATION_ID = 1234;
private static final String TAG = "GCMIntentService";
public GCMIntentService()
super("GCMIntentService");
public void createNotification(Context context, Bundle extras)
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String appName = getAppName(this);
Intent notificationIntent = new Intent(this, PushHandlerActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
notificationIntent.putExtra("pushBundle", extras);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(context.getApplicationInfo().icon)
.setWhen(System.currentTimeMillis())
.setContentTitle(extras.getString("title"))
.setTicker(extras.getString("title"))
.setContentIntent(contentIntent);
String message = extras.getString("message");
if (message != null)
mBuilder.setContentText(message);
else
mBuilder.setContentText("<missing message content>");
String msgcnt = extras.getString("msgcnt");
if (msgcnt != null)
mBuilder.setNumber(Integer.parseInt(msgcnt));
mNotificationManager.notify((String) appName, NOTIFICATION_ID, mBuilder.build());
mBuilder.setAutoCancel(true);
public static void cancelNotification(Context context)
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel((String)getAppName(context), NOTIFICATION_ID);
private static String getAppName(Context context)
CharSequence appName =
context
.getPackageManager()
.getApplicationLabel(context.getApplicationInfo());
return (String)appName;
如果您能告诉我如何解决这个问题,我将不胜感激。 我被卡住了!
【问题讨论】:
【参考方案1】:最简单的方法是自动取消通知:
.setAutoCancel(true)
这将在点击通知时自动删除通知。
这是您在代码中添加它的位置:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(context.getApplicationInfo().icon)
.setWhen(System.currentTimeMillis())
.setContentTitle(extras.getString("title"))
.setTicker(extras.getString("title"))
.setContentIntent(contentIntent)
.setAutoCancel(true);
【讨论】:
感谢您的回复。我认为您的方法是点击通知时的方法。我想知道应用程序恢复时的方法。例如;点击主屏幕上的应用程序图标。如果您能告诉我上述方法,我将不胜感激。【参考方案2】:private static final int MY_NOTIFICATION_ID= 1234;
String NotiSer = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager;
mNotificationManager = (NotificationManager) getSystemService(NotiSer);
mNotificationManager.notify(MY_NOTIFICATION_ID, notification);
要取消此通知:
mNotificationManager.cancel(MY_NOTIFICATION_ID);
【讨论】:
感谢您的快速回复。我不擅长 java ,因为我正在使用 phonegap 开发应用程序。如果您能告诉我如何修复上述代码,我将不胜感激。 getAppName方法从何而来?你确定,如果一次调用 GCMIntentService.java 和一次调用 PushHandlerActivity.java ,它返回相同的字符串?我首先会尝试 NotificationManager 方法,它不需要额外的标签(如 Tony 建议的那样)。如果可行,请对应用名称进行硬编码,或者确保您的方法 getAppName 在两种情况下都返回相同的结果。 感谢您的回复。我添加了 getAppName 方法的代码。如果您能告诉我如何修复上述代码,我将不胜感激。以上是关于在android应用程序中,调用onResume方法时清除状态栏中的小图标的主要内容,如果未能解决你的问题,请参考以下文章
如果显示插页式广告,则在活动中未调用onResume()和onPause()
android的adapter能不能在onResume方法中创建