我正在尝试通过点击通知来刷新活动的内容。当我在其他活动中时,我可以导航到该活动,然后点击通知。我想要实现的是, 我在活动A中显示一些内容。我收到一个新的通知,我点击它,活动A应该重新启动,或者活动中的内容应该根据我在通知的PendingIntent中传递的内容进行刷新。
我所做的一切,
尝试设置PendingIntent.FLAG_CANCEL_CURRENT
和PendingIntent.FLAG_UPDATE_CURRENT
尝试在我传递的意图中设置Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_SINGLE_TOP
。
检查onNewIntent()
中的数据是否未刷新。我得到了我在旧意图中传递的相同数据。
同时传递了一个独特的requestCode
和PendingIntent,仍然是相同的。
还有其他建议吗?
答案 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