`
byandby
  • 浏览: 1696324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

发通知 PendingIntent 中Intent 内容没有更新

阅读更多
<activity android:name="SkyfileActivity" 
	 	 android:launchMode="singleTask" />
   当我们把Activity 启动模式设置为 singleTask 之后 当我们下次 再去 用Intent 启动 这个 Activity 的时候 就不会去调用 onCreate方法 而是去调用onNewIntent()方法 然后把Intent中的数据传给它 , 前几天遇到的问题是  当我 发一个通知给状态栏  然后点击这个通知  自然会执行 PendingIntent 里边的Intent。  但是   在Activity那边的 onNewIntent()方法里边 得到的数据  不是最新的 也就是说 是 第一次的 以后 不管我怎么点通知 它都 是 第一次点击通知得到的数据,当以后再点击通知的时候其实 数据已经变了 但是 onNewIntent()方法总是得不到最新的数据,   无语了很久,  去 农民伯伯翻译组 发问得解    需要给 PendingIntent 加一个 FLAG

PendingIntent contentIntentBegin = PendingIntent.getActivity(
					notificationContext, 0, inStart, PendingIntent.FLAG_UPDATE_CURRENT);


   最后一个参数就是 FLAG,这个FLAG 的 意思就是:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。这个非常有用,例如之前提到的,我们需要在每次更新之后更新Intent中的Extras数据,达到在不同时机传递给MainActivity不同的参数,实现不同的效果。

   就是 Intent里边的数据没更新而已, 很2个问题 搞了很久 才发现原来加个FLAG 就行了,有点伤不起了。!!

  代码片段
	public void showNotiMessageBegin(String message, int requestCode,
			String itemid) {
		notification = new Notification(R.drawable.skyfile_upload_noti,
				message, System.currentTimeMillis());
		if (requestCode == 1 && notification.contentIntent == null) {
			int index = itemid.lastIndexOf("/");
			final String backPath1 = itemid
					.substring(0, index == 0 ? 1 : index);
			           
			Intent inStart = new Intent(notificationContext, SkyfileActivity.class);
			inStart.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			inStart.setData(Uri.parse(MetaDataView.class.getName()));
			inStart.putExtra(MetaDataView.BUNDLE_PATH, backPath1);
			PendingIntent contentIntentBegin = PendingIntent.getActivity(
					notificationContext, 0, inStart, PendingIntent.FLAG_UPDATE_CURRENT);
			notification.contentIntent = contentIntentBegin;
			notification.flags |= Notification.FLAG_AUTO_CANCEL;
			notification.setLatestEventInfo(notificationContext,
					UPLOATTITLE, message, contentIntentBegin);
			notificationMgr.notify(1, notification);
		} else {
			notification.contentIntent.cancel();
		}
	}


   更多关于PengingIntent 的 大家可以看看 这里。 http://www.7dot9.com/2011/04/android-pendingintent%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E8%BF%B7%E6%83%91/
分享到:
评论

相关推荐

    安卓之 (解决问题)PendingIntent和Intent的区别1

    首先,Intent不能直接跨进程传递,而PendingIntent允许一个应用将自己的操作授权给另一个应用去执行,比如在通知、闹钟或桌面小部件中。其次,PendingIntent提供了权限控制,使得应用可以在其不运行时也能触发某个...

    Android中pendingIntent与Intent的深入分析

    在Android开发中,Intent和PendingIntent是两个非常关键的概念,它们在应用程序的组件间通信中起着重要作用。Intent主要用于启动或传递数据给另一个组件,如Activity、Service或BroadcastReceiver,而PendingIntent...

    android 服务 Service PendingIntent 通知

    `PendingIntent`主要用于跨进程通信,例如在通知(Notification)中使用,当用户点击通知时,可以通过`PendingIntent`启动一个Activity或Service。 通知(Notification)是Android系统向用户展示应用在后台运行状态...

    Android 之 PendingIntent用法介绍

    PendingIntent的生命周期与Intent关联,Intent中的数据(如动作、数据、类别、额外数据)都会影响到PendingIntent。例如,当我们更新Notification的Intent时,如果使用了`FLAG_UPDATE_CURRENT`,那么先前的...

    Notification的用法和PendingIntent使用

    3. 设置通知信息:使用 `setLatestEventInfo` 方法设置通知的标题、内容和 pending Intent。 4. 发送通知:使用 `NotificationManager` 的 `notify` 方法发送通知,并指定发送信息的显示图标和 Notification 对象。 ...

    Android中pendingIntent的深入理解

    在Android开发中,PendingIntent是一个非常关键且独特的组件,它为应用程序提供了跨进程通信的能力,使得一个应用可以请求系统在未来的某个时刻执行特定的操作。PendingIntent不仅涉及到了Android的权限模型,还涉及...

    PendingIntent 使用示例

    在Android应用开发中,PendingIntent常用于启动服务、发送广播、显示通知等场景,为应用提供了一种跨进程调用的能力。下面我们将深入探讨PendingIntent的使用方法,以及在Notification和短信发送中的具体应用。 ...

    PendingIntent

    PendingIntent的工作原理是它会持有一个意图(Intent)的引用,并且当这个PendingIntent被触发时,系统会根据Intent的内容执行相应的操作。这种设计模式为应用提供了一种安全的方式来与其他组件交互,因为只有拥有...

    Android中PendingIntent的简要介绍.pdf

    PendingIntent是基于Intent的,但它们之间没有继承关系。PendingIntent的创建是为了延迟Intent的执行,也就是说,它并不立即执行Intent的操作,而是将其封装起来,供其他组件在需要的时候使用。这种机制特别适用于...

    Android Studio 实验二:Intent的使用

    使用putExtra()方法可以将数据附加到Intent中,然后在接收端使用getExtra()系列方法获取这些数据: ```java // 发送端 Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", ...

    Android应用源码之Intent1_Intent.zip

    - 启动PendingIntent:用于在通知、AlarmManager等场景下间接启动一个Activity或Service。 6. **Intent Flag** Intent的Flag可以改变启动行为,例如`FLAG_ACTIVITY_NEW_TASK`用于在新的任务栈中启动Activity,`...

    Android实现Notification的通知栏常驻.zip

    4. **更新与取消通知**:如果需要更新通知内容,可以使用相同的`NOTIFICATION_ID`调用`notify()`方法;若要取消通知,使用`cancel()`方法。 5. **自定义样式**:Android提供多种Notification样式,如InboxStyle、...

    自制发送短信程序--SmsManager与PendingIntent类的使用

    在短信发送场景中,`PendingIntent`用于创建意图(Intent)并将其绑定到广播接收器,以便在特定事件(如短信发送成功或失败)发生时触发相应的动作。创建`PendingIntent`通常使用`getBroadcast()`方法: ```java ...

    AlarmManager、PendingIntent的使用\\附件Home监听十分钟后再次启动应用取消服务

    在Android开发中,`AlarmManager`和`PendingIntent`是两个非常重要的组件,它们用于实现应用程序在特定时间或触发特定事件时执行任务的功能。本文将深入探讨这两个组件的使用,并结合给定的“附件Home监听十分钟后...

    Andriod Intent使用代码举例

    - 使用`PendingIntent`,将Intent包装成可延迟执行的对象,常用于通知、AlarmManager等场景。 - `Intent.createChooser(Intent target, CharSequence title)`:创建一个Intent选择器,让用户从多个可处理相同...

    Android 通知(notification)简单实用Demo,包含点击功能

    在Android开发中,通知(Notification)是用户界面中不可或缺的一部分,它允许应用在状态栏上显示消息,即使应用不在前台运行也能与用户交互。这个"Android 通知(notification)简单实用Demo"提供了一个基础的实现...

    往通知栏发通知

    `sendNotification()`方法中,我们创建了一个`NotificationCompat.Builder`实例,设置通知的基本信息如图标、标题和内容。同时,我们还添加了一个操作,当用户点击通知时,可以启动主活动。最后,通过`...

    Android 自定义通知栏 更新通知栏进度条

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); ``` 此外,注意Android O及以上版本需要使用渠道...

    Android通知栏消息、点亮屏幕、震动、声音、显示样式

    在Android系统中,通知是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使应用在后台运行或被关闭时也能提醒用户。本篇将深入探讨如何利用Android API创建和管理通知,包括点亮屏幕、震动、播放声音以及...

Global site tag (gtag.js) - Google Analytics