我有以下代码,我想在用户点击通知时检索一些数据。但我不知道如何处理它。 我知道有一种方法可以将活动作为参数传递,但取决于我应该打开不同活动的通知内容。
我发布了一个通知(带有键值数据) - >用户点击通知 - > BroadcastReceiver(检索键值数据) - >活性
问题是我的BroadcastReceiver没有收到数据。
Intent notificationIntent = new Intent(NOTIFICATION_SELECTED_ACTION);
notificationIntent.putExtra("mykey","myvalue");
PendingIntent intent = PendingIntent.getBroadcast(context, 0, notificationIntent, 0);
context.getApplicationContext().registerReceiver(receiverOpen, new IntentFilter(NOTIFICATION_SELECTED_ACTION));
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
...
mBuilder.setContentIntent(intent);
//I publish the notification in the notification bar
notification = mBuilder.build();
mNotificationManager.notify(id_push, notification);
private final BroadcastReceiver receiverOpen = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context.getApplicationContext(),MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Value is always null ffs
String value = intent.getStringExtra("mykey");
count = 0; // Do what you want here
notificationList.clear();
editor.clear();
editor.commit();
context.startActivity(i);
}
};
答案 0 :(得分:0)
与您的代码一样,您正在使用广播服务。如果您在前台应用程序时收到推送通知。你可以使用下面的广播服务
Intent intent = new Intent("myPush");
intent.putExtra("message", messageBody);
intent.putExtra("title", title);
intent.putExtra("Id", id);
getApplicationContext().sendBroadcast(intent);
您可以在应用中的任何位置注册广播公司。如下所示
@Override
public void onResume() {
super.onResume();
getActivity().registerReceiver(mMessageReceiver, new IntentFilter("myPush"));
}
所以当推送到达时,您可以使用以下方法来启动任何方法以转到首选活动。
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
String message = intent.getStringExtra("message");
String title = intent.getStringExtra("title");
final String orderId = intent.getStringExtra("Id");
Log.e("Main Activity",title+" : "+message);
//AnyIntent or Query
}
};
在后台应用时。
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("message", messageBody);
intent.putExtra("title", title);
intent.putExtra("Id", Id);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
并在onCreate方法的主要活动中处理它。
Intent intent = getIntent();
String receivedId = intent.getStringExtra("Id");
if(receivedId != null){
//Do Somthing as you want
}
答案 1 :(得分:0)
根据这篇文章https://stackoverflow.com/a/6752571/2139691 我应该使用PendingIntent.FLAG_CANCEL_CURRENT
PendingIntent intent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
答案 2 :(得分:-1)
首先,您需要在通知中拥有价值。 通过Intent将数据从通知活动传递到您的意图活动。 见例如。
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("point", "2");
intent.putExtra("link", link);
将此通知传递给MainActivity, 在MainActivity中,
if (getIntent().hasExtra("point")) {
String link = getIntent().getStringExtra("link)
使用此链接'我开了网站。 谢谢.. !!