Intent PendingIntent

来源:互联网 发布:大连开发区知润山房照 编辑:程序博客网 时间:2024/05/16 11:28

android 根本就不是很难的语言,我们只是苦于学习路径。

一.   Intent

就是一个messag  object,传递数据并开启组件(activity   service。。。)

其传递数据的属性Data   该属性接受的是一个Uri对象,什么是Uri对象,就是一个字符创。格式是:

scheme://host:port/path


使用Intent启动组件有2中方式  显示  隐式

显示并传递数据:

Intent  intent=new Intent(this,OtherActivity);

//设置Data属性传递数据,当然你也可以不传

intent.setData(Uri.parse("filepath"));

//此处要加这个判断    这是我们很多人都会忽略的

//有些第三方也会忘记这个判断   如果你要启动的组件不存在会报错

//比如第三方实现分享   如果微信在你手机中没有安装。而第三方没有这个判断,就会报错了

if(intent.resolveActivity(getPackageManager())!=null){

startActivity(intent);

}



隐式启动:

Intent intent=new Intent();

intent.setAction(Intetn.ACTION_SEND);

intent.setExtra("key","value");

intent.setType("text/plain");

if(intent.resolveActivity(getPackageManager())!=null){

startActivity(intent);

}


在我们配置清单中<Intent-filter>

我们经常只做如下使用

<Intent-filter>

<data  android:mimeType="image/*"/>

</Intent-filter>

此种是什么情况呢,就是Intent中的URI是content:...或者file:...  这代表是本地数据,此时我们配置清单中就不需要设置URI


我们隐式启动还有一个知识点就是,如果有多个组件,你就必须创建一个dialog让用户选择,到底启动哪个组件。Intent这个class中已经提供方法了,很简单

Intent chooser=Intent.createChooser(intent,"title");


二.   PendingIntent

其实他也就是Intent,没什么。只不过他对Intent进行了包装,实现了一些额外功能

使用到PendingIntent有以下几种场景:

用户和通知消息交互时(NotificationManager执行Intent)

用户和你的组件(app widget)交互时

未来某个时段执行某个意图(配合AlarmManager使用)、


然后直接看一个notification的使用吧

//NotificationCompat.Builder 初始消息的各类属性

NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(this);

.setSmallIcon(R.drawable.notification_icon);

.setContentTitle("My Notification");

.setContentText("Hello World");


Intent intent=new Intent(this,OtherActivity);


TaskStackBuilder builder=TaskStackBuilder.create(this);

builder.addParentStack(OtherActivity.class);

builder.addNextIntent(intent);


//使用TaskStackBuilder获得pendingIntent 

PendingIntent pendingIntent=builder.getPendingIntent(0,PendingIntent.FLAG_UPDATA_CURRENT);

//设置通知的pendingIntent

mBuilder.setContenIntent(pendingIntent);

NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

//mBuilder.builder()获得一个notification对象    notify发布这个通知  

manager.notify(id,mBuilder.builder());


好的,就这么多

1 0