android PendingIntent

今天看见了解了PendingIntent,看了下文档,翻译了一点


        PendingIntent 是对所执行的Intent和目标action的一个包装,能够通过getActivity,getActivities,getBroadcast,和getService创建它的实例,由于它的实例能够传递给其

他应用,所以它能够一段时间之后在你当前的应用中处理你说描述的action。

       通过给其他应用一个PendingIntent,你就能够像自己的应用一样,指定其他应用正确的执行你所指定的操作,同样的,你一定关心怎样建立PendingIntent,通常,例

如,为了确保它是最后的发送的地方或者其他任何地方,你所提供的基础Intent应该有明确的应用包名设置成你自己一个组件。

       对于系统PendingIntent本身就是一个通过系统描述原始数据用来检索的简单的令牌保持的引用,这意味着,即使他自己的应用进程被杀死,PendingIntent在所包含的

其他进程当中也可以使用。如果新创建的应用后来又重新获取了同样的合法PendingIntend,那么它将会得到一个同一个PendingIntent 实例,并且能够调用cancel方法取

消它

       由于这种行为,对于了解当两个Intent都想获取一个PendingIntent时是非常重要的。人们所犯的一个常识性错误是:为了每次得到不同的PendingIntent,使用Intent创建

多个PendingIntent只能在他们额外的内容中变法的对象,这样做是行不通的。那些用于匹配的一部分Intent和通过Intent.filterEquals 定义的Intent是同一个。如果你使用两

个和Intent.filterEquals对等的Intent对象,对于这两个Intent你将得到同一个PendingIntent。

      下面有两个典型的方法处理上述的情况:

       如果你真的需要多个明显的有效PendingIntent对象在同一时刻(例如:想两个nofifications在同一时刻都显示出来)你将需要保证他们说关联的PendingIntent是不同的。

也许任何一个被认作Intent.filterEquals 的Intent属性,或者不同作用的整型代号被提供给getActivity(),getActivities(),getBroadcast(),getService()

       如果你只需要一个任何你将使用的Intent都能够使用的有效的PendingIntent,你可以使用FLAG_CANCEL_CURRENT或者FLAG_UPDATE_CURRENT其中一个去取消

或 改变当前PendingIntent所关联的任意一个你所提供的Intent。

       翻译很烂,使用有道查过来的,但是完成后真的很爽,对理解也有大的帮助。

下面仿照新浪微博,转发微博时,在通知栏会有一个发送成功的提醒,首先我们要知道,在任务栏的提醒都是通过Notification来实现,所以这个也不例外,但是为什么通知

一下就消失了呢?Notification当中也没有设置显示多久的函数,所以那就只有一个方法:人为定时显示多久后将Notification取消,而Notification又是和Intent或者

PendingIntent连着用的,下面的代码就是介绍PendingIntent在Notification中的使用方法:

public class MainActivity extends Activity implements OnClickListener{

	Button btn;
	public NotificationManager manager;
	
	Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			if(msg.what==10){
				if(manager!=null){
					manager.cancel(0);
				}
			}
		};
	};
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);			
		btn = (Button)findViewById(R.id.button1);
		btn.setOnClickListener(this);		
	}
	@Override
	public void onClick(View v) {			
		Intent intent = new Intent(this, MainActivity.class);
		intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		PendingIntent pending =PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
				
		Notification notifi = new NotificationCompat.Builder(this)		
				.setSmallIcon(R.drawable.ic_launcher)
				.setAutoCancel(true)				
				.setTicker("发送成功")
				.setContentIntent(pending)
				.setContentTitle("发送成功")
				.build();
		
		manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
		
		manager.notify(0, notifi);				
		Timer timer = new Timer();
		timer.schedule(task(), 2000);				
	}	
	public TimerTask task(){
		TimerTask task = new TimerTask() {		
			@Override
			public void run() {				
				handler.sendEmptyMessage(10);
			}
		};
		return task;
	}
}
这种在通知栏显示Toast的通知效果,避免了影响到人们的阅读或浏览体验,注意:在NotificationCompat.Builder要求的minSdkVersion为11。

参考链接:

http://www.cnblogs.com/plokmju/p/android_Notification.html

http://www.cnblogs.com/idayln/archive/2013/05/22/3093979.html

http://www.cnblogs.com/newcj/archive/2011/03/14/1983782.html

http://blog.csdn.net/creativemobile/article/details/9055411

http://blog.csdn.net/zeng622peng/article/details/6180190

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值