我可以找到一种方法从我的通知中向我的活动发送参数 .
我有一个创建通知的服务 . 当用户点击通知时,我想用一些特殊参数打开我的主要活动 . 例如,项目ID,因此我的活动可以加载并呈现特殊项目详细信息视图 . 更具体地说,我正在下载一个文件,当下载文件时,我希望通知有一个意图,当点击它时,它会以特殊模式打开我的活动 . 我试图在我的意图上使用 putExtra
,但似乎无法提取它,所以我认为我做错了 .
来自我的服务的代码,用于创建通知:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
我的Activity中的代码尝试从通知中获取额外参数:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
额外的东西总是空的,我从来没有在我的日志中得到任何东西 .
顺便说一句...... onCreate
只在我的活动开始时运行,如果我的活动已经开始我还想收集额外的东西并根据我收到的item_id展示我的活动 .
有任何想法吗?
12 回答
我尝试了一切但没有任何效果 .
最终提出了以下解决方案 .
1- in manifest为活动添加android:launchMode =“singleTop”
2-在进行挂起意图时执行以下操作,使用bundle而不是直接使用intent.putString()或intent.putInt()
如果你使用
在您的AndroidManifest.xml文件中,要启动Activity,您必须在意图中使用以下内容:
重要的是设置唯一数据,例如使用一个唯一的ID,如:
在阅读了一些电子邮件列表和其他论坛之后,我发现这个技巧似乎为意图添加了独特的数据 .
像这样:
我不明白为什么需要这样做,它与意图有关,只能通过它的附加物来识别......
AndroidManifest.xml
包括launchMode =“singleTop”
SMSReceiver.java
设置Intent和PendingIntent的标志
MessageDetailsActivity.java
onResume() - 每次都被调用,加载额外的东西 .
希望它有所帮助,它基于stackoverflow上的其他答案,但这是最新的,对我有用 .
这很简单,这是我使用对象的解决方案!
My POJO
Method Notification
New Activity
Good Luck!!
服务使用
PendingIntent.FLAG_UPDATE_CURRENT
对我来说工作 .
也许有点晚了,但是:而不是:
用这个:
请查看本指南(creating a notification)并对ApiDemos "StatusBarNotifications"和"NotificationDisplay"进行采样 .
要管理活动是否已经运行,您有两种方法:
在启动活动时向启动时添加 FLAG_ACTIVITY_SINGLE_TOP 标志,然后在活动类中实现 onNewIntent(Intent intent) 事件处理程序,这样就可以访问为活动调用的新意图(这与调用getIntent()不同,这将始终返回启动您的活动的第一个Intent .
与第一个相同,但您必须在AndroidManifest.xml活动中添加 "singleTop" ,而不是向Intent添加标志 .
如果您使用intent extras,请记住使用标志
PendingIntent.FLAG_UPDATE_CURRENT
调用PendingIntent.getActivity()
,否则将为每个通知重复使用相同的附加内容 .我有类似的问题,我的应用程序显示消息通知 . 当有多个通知并单击每个通知时,它会在视图消息活动中显示该通知详细信息 . 我解决了在视图消息意图中收到相同额外参数的问题 .
这是解决这个问题的代码 . 用于创建通知Intent的代码 .
用于查看消息活动的代码 .
请在显示通知时使用PendingIntent而不是解决 .
PendingIntent intent = PendingIntent.getActivity(this,0,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
将PendingIntent.FLAG_UPDATE_CURRENT添加为最后一个字段 .
在这里遇到同样的问题 . 我通过使用不同的请求代码解决它,使用相同的ID作为通知,同时创建PendingIntent . 但仍然不知道为什么要这样做 .
在做了一些搜索后,我从android开发者指南获得了解决方案
要在Test Activity类中获取Intent额外值,您需要编写以下代码: