如何在通知单击时重新启动/刷新活动内容

时间:2014-09-26 07:03:08

标签: android android-intent android-activity push-notification android-pendingintent

我正在尝试通过点击通知来刷新活动的内容。当我在其他活动中时,我可以导航到该活动,然后点击通知。我想要实现的是, 我在活动A中显示一些内容。我收到一个新的通知,我点击它,活动A应该重新启动,或者活动中的内容应该根据我在通知的PendingIntent中传递的内容进行刷新。

我所做的一切,

  1. 尝试设置PendingIntent.FLAG_CANCEL_CURRENTPendingIntent.FLAG_UPDATE_CURRENT

  2. 尝试在我传递的意图中设置Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP

  3. 检查onNewIntent()中的数据是否未刷新。我得到了我在旧意图中传递的相同数据。

  4. 同时传递了一个独特的requestCode和PendingIntent,仍然是相同的。

  5. 还有其他建议吗?

4 个答案:

答案 0 :(得分:3)

正如 aldoran 所说,使用LocalBroadcastManager。在您的Activity类中:

@Override
protected void onResume() {
    super.onResume();
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(FILTER_STRING));
}

@Override
protected void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d("receiver", "Got message");
  }
};

然后在GSM广播中将您的数据置于意图之中:

Intent intent = new Intent(FILTER_STRING);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

答案 1 :(得分:3)

如果您使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP,则应该重新创建活动(如果它在堆栈中),或者如果它不在堆栈中则启动新活动。如果您不想重新创建活动(如果它已经在堆栈中),您可以使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP

答案 2 :(得分:0)

试试这段代码:

           Intent notificationIntent = new Intent(context, DetailActivity.class);
           notificationIntent.putExtra(CommonConstants.EXTRA_NOTE_ID, note.get_id());
           notificationIntent.setAction(CommonConstants.NOTE_NOTIFICATION_REMINDER);

           notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
           PendingIntent contentIntent = PendingIntent.getActivity(context, note.get_id(), notificationIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
           NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle(context.getString(R.string.app_name)).setContentText(note.getMessage());
           mBuilder.setContentIntent(contentIntent);
           mBuilder.setDefaults(Notification.DEFAULT_SOUND);
           mBuilder.setAutoCancel(true);
           NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
           mNotificationManager.notify(note.get_id(), mBuilder.build());

最重要的是你必须致电

 PendingIntent contentIntent = PendingIntent.getActivity(context, note.get_id(), notificationIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent.FLAG_CANCEL_CURRENT

答案 3 :(得分:-1)

您也可以使用LocalBroadcastManager或撰写自己的BroadcastReceiver,然后从Broadcast发送Notification