Notification通过Intent传递参数getIntent()为null的问题解决

想着通过Notification 发送一条通知

点击通知跳转到一个新的activity

在activity中得到Notification的id,从而能够cancel掉Notification。

但是在Notification发送时候,封装好了intent的数据。

当跳转到了 新的activity的时候,getIntent 什么都得不到。百度查询了好久都没有一个正解。

无奈翻墙google继续寻找原因。最后在 http://stackoverflow.com

//关键两点1.
//传递数据想要成功,需要设置这里的flag参数
		intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
//2,新Activity中重写onNewIntent方法

新Activvity的代码

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		int tagId = bundle.getInt("tag");
		NotificationManager nm = (NotificationManager) this
				.getSystemService(Context.NOTIFICATION_SERVICE);

		Log.e("OtherActivity", "tag = tagId = "+tagId);
		nm.cancel(tagId);

	}

	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);

		 setIntent(intent);
	}

//发送广播的代码	
private void initNotification() {
		// 1:获取NotificationManager
		NotificationManager nm = (NotificationManager) this
				.getSystemService(Context.NOTIFICATION_SERVICE);
		// 2、封装发送的信息
		Notification mNotification = new Notification();
		mNotification.icon = R.drawable.qq;
		mNotification.tickerText = "收到消息时提示内容";
		mNotification.defaults = Notification.DEFAULT_SOUND;

		Intent intent = new Intent(this, OtherActivity.class);
		Bundle bundle = new Bundle();
		bundle.putInt("tag", 100);
		intent.putExtras(bundle);
		//传递数据想要成功,需要设置这里的flag参数
		intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

		PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0,
				intent, PendingIntent.FLAG_UPDATE_CURRENT);

		mNotification.setLatestEventInfo(this, "contentTitle", "contentText",
				mPendingIntent);

		// 3、发送通知
		nm.notify(100, mNotification);
	}

原文详解;

时间: 2024-09-15 13:40:08

Notification通过Intent传递参数getIntent()为null的问题解决的相关文章

Android应用开发(三):如何完成Activity之间的传递参数

本文介绍如何在Activity之间传递参数,该参数包括简单数据.包Bundle(提供2种方法,即有和无Bundle的两种方法).值对象(提供2种方法,即Serializable和Parcelable的两种方法),最后介绍如何获取Activity的返回参数.以上所介绍的内容都提供了操作步骤和源码以便于大家交流与分享心得.   1.在Activity之间传递简单数据 (1).新建Button 在activity_main.xml中加入如下代码: <Button android:layout_widt

android-通过传递参数开始执行Intent

问题描述 通过传递参数开始执行Intent 我在ListActivity中的构造函数里传递一些变量,通过下面的代码开始活动: startActivity(new Intent (this viewContacts.class));现在想使用相似的代码 把两个字符串传递到构造函数,然后开始执行Intent.怎么实现呢? 解决方案 为了传递参数,要创建新的意图,放置参数映射: Intent myIntent = new Intent(this NewActivityClassName.class);

spring mvc-表单传递参数,springmvc 参数为null

问题描述 表单传递参数,springmvc 参数为null 前台我用一个表单Post提交,如下 window.location="./roleView"; //获得表单id提交 document.getElementById("searchFormId").submit(); 后台 springmvc 接不到表单传递的值 解决方案 看看contorl里面注入是否有问题 解决方案二: 看看name与后台接值是否一致

Android 使用Intent传递数据的实现思路与代码

Intent是Android中一个非常重要的概念,跟这个词的本意(意图,目的)一样,这个类在Android中的作用就是要调用某个组建去做某一件事,比如通过startActivity启动一个Activity,通过startService启动一个Service,通过sendBroadcast发送一个广播等,它相当于各个组建间的一个桥梁.很重要的一点是这个过程是可以跨进程的,比如在应用中可以启动调用某个播放器组件(系统自身的或者第三方的)来播放一段视频,启动照相机程序拍照等等. 当我们启动视频播放器播

Android Fragment传递参数Fragment.setArguments(Bundle bundle)

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 [java] view plain cop

android-关于Android使用Intent传递对象问题

问题描述 关于Android使用Intent传递对象问题 mainactivity: Intent intent = new Intent(SearchResultActivity.this SearchResultDetailActivity.class); intent.putExtra(""poiItemDetail"" poiItemDetail); startActivityForResult(intent 3); secondactivity: PoiI

android-Android Intent 如何接收到指定的Intent传递过来的值呢?

问题描述 Android Intent 如何接收到指定的Intent传递过来的值呢? 写了2个Activity,A.B,2个Activity之间可以相互跳转. 1.A中有一个发送按钮可实现传值到B中,同时还有一个独立的跳转按钮. 2.在B中有接收A传值过来的的代码 3.执行中,如果直接执行了跳转按钮,B的接收Intent代码中,就会出现空指针异常,目前通过 try{}catch临时确保能正常运行. 想请问:能否有方法可以让B接收传值的代码能够识别那个Intent才是传值过来的,避免空指针异常出现

17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广

Android开发向activity中的webview传递参数

问题描述 Android开发向activity中的webview传递参数 各位帅气可爱爱卖萌的大神们,好难为情我又要打扰你们,小弟被一问题困扰好久了,实在是辗转反侧,难以入睡,夜不能寐,所以想了好久还是决定请教你们. 问题如下, 工程有2个activity,activity①有1个edittext和1个button activity②有一个webview 我想在activity①里的edittext输入一串网址,然后点击button就可以让activity②显示出来,并让webview打开act