在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方法中创建

从后台弹出时不调用 Fragment 的 onResume()

由于onResume,Android重复列表视图

AsyncTask 不断重复 onResume

Android 必知必会:自定义 View 可以知道 onPause/onResume 被调用了吗?