Android 如何检测NotificationManager发送的通知的发件人/检测已单击通知栏上的哪个通知?
我正在开发GPS应用程序。如果用户进入或超出预定义区域,我的应用程序将触发NotificationManager通知。我的应用程序可以为这两种情况发出通知 从onResume()中,我总是获取单击通知的最新intent.setExtra()值,而不是intent.setExtra值 问题是如何检测用户点击通知的区域内或区域外?(我想对不同的案例展示不同的观点) 是否可以为单击的通知添加侦听器 这是我的代码spinet:Android 如何检测NotificationManager发送的通知的发件人/检测已单击通知栏上的哪个通知?,android,notifications,notificationmanager,Android,Notifications,Notificationmanager,我正在开发GPS应用程序。如果用户进入或超出预定义区域,我的应用程序将触发NotificationManager通知。我的应用程序可以为这两种情况发出通知 从onResume()中,我总是获取单击通知的最新intent.setExtra()值,而不是intent.setExtra值 问题是如何检测用户点击通知的区域内或区域外?(我想对不同的案例展示不同的观点) 是否可以为单击的通知添加侦听器 这是我的代码spinet: private void displayNotificationMessag
private void displayNotificationMessage(String message, boolean vibrate, boolean playSound, Intent contentIntent, String notificationTag)
{
Notification notification = new Notification(R.drawable.buslogo, message, System.currentTimeMillis());
PendingIntent myPendingIntent = PendingIntent.getActivity(this.getBaseContext(),0, contentIntent,PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, "Friendly Reminder", message, myPendingIntent);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (vibrate)
notification.vibrate=new long[] {100L, 100L, 200L, 500L};
if (playSound)
notification.defaults |= Notification.DEFAULT_SOUND;
notification.number = ++notificationCounter;
notificationMgr.notify(notificationTag, notificationCounter, notification);
}
@Override
protected void onNewIntent( Intent intent ) {
Log.i( TAG, "*********** onNewIntent(), intent = " + intent );
if (intent.getExtras() != null)
{
Log.i(TAG, "in onNewIntent = " + intent.getExtras().getString("test"));
}
super.onNewIntent( intent );
setIntent( intent );
}
@Override
public void onResume() {
super.onResume();
Log.i(TAG, "*********** Main - onResume()");
Intent intent = this.getIntent();
if (intent.getExtras() != null)
{
Log.i(TAG, "test = " + intent.getExtras().getString("test"));
}
}
public void createNotification(String msnContent)
{
Intent intent = new Intent();
intent.setClass(this, Main.class);
Bundle bundle = new Bundle();
bundle.putString("test", msnContent);
intent.putExtras(bundle);
displayNotificationMessage(msnContent, true, true, intent, "test");
}
是否可以为单击的通知添加侦听器
对每种情况使用不同的
pendingent
。如果您只是更改一个额外的,请确保在创建pendingent
时使用FLAG\u UPDATE\u CURRENT
,我从这篇文章中找到了一个解决方案-。另外,感谢Commonware的帮助
我错过了intent.setAction()
下面是检测已单击通知栏上的哪个通知的代码spinet。希望它能帮助其他有同样问题的人
package com.NotificationTest;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity {
private static final String TAG = Main.class.getSimpleName();
int notificationCounter =0;
private NotificationManager notificationMgr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
notificationMgr =(NotificationManager)getSystemService(
NOTIFICATION_SERVICE);
notificationMgr.cancelAll();
Button b1 = (Button) findViewById(R.id.b1);
b1.setText("B1");
b1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
createNotification("From B1");
}
});
Button b2 = (Button) findViewById(R.id.b2);
b2.setText("B2");
b2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
createNotification("From B2");
}
});
}
private void displayNotificationMessage(String message, boolean vibrate, boolean playSound, Intent contentIntent, String notificationTag)
{
Notification notification = new Notification(R.drawable.icon, message, System.currentTimeMillis());
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent myPendingIntent = PendingIntent.getActivity(this.getBaseContext(),0, contentIntent,PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, "Friendly Reminder", message, myPendingIntent);
/*if (vibrate)
notification.vibrate=new long[] {100L, 100L, 200L, 500L};
if (playSound)
notification.defaults |= Notification.DEFAULT_SOUND;*/
notification.number = ++notificationCounter;
notificationMgr.notify(notificationTag, notificationCounter, notification);
}
@Override
protected void onNewIntent( Intent intent ) {
Log.i( TAG, "*********** onNewIntent(), intent = " + intent );
if (intent.getExtras() != null)
{
Log.i(TAG, "in onNewIntent = " + intent.getExtras().getString("test"));
}
super.onNewIntent( intent );
setIntent( intent );
}
@Override
public void onResume() {
super.onResume();
Log.i(TAG, "*********** Main - onResume()");
Intent intent = this.getIntent();
if (intent.getExtras() != null)
{
String extraOfClickedNotification = intent.getExtras().getString("test");
Log.i(TAG, "test = " + extraOfClickedNotification);
if (extraOfClickedNotification.equals("From B1"))
{
// Do something
}
else if (extraOfClickedNotification.equals("From B1"))
{
// Do something
}
}
}
public void createNotification(String msgContent)
{
Intent intent = new Intent();
intent.setAction(msgContent + System.currentTimeMillis());
intent.setClass(this, Main.class);
Bundle bundle = new Bundle();
bundle.putString("test", msgContent);
intent.putExtras(bundle);
displayNotificationMessage(msgContent, true, true, intent, "test");
}
}
谢谢,我已经修改了我的代码。每次通过notificationMgr.notify()发送通知之前,我都会将一个新的PendingEvent对象传递给notification.SetLateStevenInfo()。但它仍然无法区分已单击通知栏上的哪个通知。因为onResume()总是返回最新的setExtra()值。有没有办法将值/对象从原始活动传递到通知调用的意图?@user767987:“因为onResume()总是返回最新的setExtra()值。”再次感谢。我已经阅读了您提供的链接,并将Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP添加到传递给pendingent的Intent。但是我发现onNewIntent(Intent-Intent)仍然获得了我传递给notification.setLateStevenInfo()的最新意图。有什么不对劲吗?或者有没有其他方法来区分在通知栏上单击了哪个通知?@Android初学者:“但是我发现onNewIntent(意图-意图)仍然获得了我传递给通知的最新意图。setLatestEventInfo()”--这正是你想要的。