Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件。
对于每种组件来说,激活的方法是不同的:
1.通过传递一个Intent对象至 Context.startActivity()或Activity.startActivityForResult()以载入(或指定新工作给)一个activity。相应的activity可以通过调用 getIntent() 方法来查看激活它的intent。Android通过调用activity的onNewIntent()方法来传递给它继发的intent。
一个activity经常启动下一个activity。如果它所启动的那个activity返回一个结果,它会以调用startActivityForResult()来取代startActivity()。比如说,如果它启动了另外一个activity以使用户挑选一张照片,它也许想知道哪张照片被选中了。结果将会被封装在一个Intent对象中,并传递给发出调用的activity的onActivityResult() 方法。
2.通过传递一个Intent对象至Context.startService()将启动一个服务(或给予正在运行的服务以一个新的指令)。Android调用服务的onStart()方法并将Intent对象传递给它。
一个Intent可以被调用组件传递给 Context.bindService()以获取一个正在运行的目标服务的连接。这个服务会经由onBind() 方法的调用获取这个Intent对象(如果服务尚未启动,bindService()会先启动它)。比如说,一个activity可以连接至前述的音乐回放服务,并提供给用户一个可操作的(用户界面)以对回放进行控制。这个activity可以调用 bindService() 来建立连接,然后调用服务中定义的对象来影响回放。
3.应用程序可以凭借将Intent对象传递给 Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其它类似方法来产生一个广播。Android会调用所有对此广播有兴趣的广播接收器的 onReceive()方法将intent传递给它们。
Intent的三个属性:
1.action,要执行的动作
2.data和extras,即执行动作要操作的数据和传递到目标的附加信息
3.category,要执行动作的目标所具有的特质或行为归类
配置action时 一定要配置category一定要配,否则报错:找不到Activity
<category android:name="android.intent.category.LAUNCHER" />
Intent.CATEGORY_DEFAULT (android.intent.category.DEFAULT) //默认的category
Intent.CATEGORY_PREFERENCE (android.intent.category.PREFERENCE) // 表示该目标Activity是一个首选项界面
Intent.CATEGORY_BROWSABLE (android.intent.category.BROWSABLE) //指定了此category后,在网页上点击图片或链接时,系统会考虑将此目标Activity列入可选列表,供用户选择以打开图片或链接。
4.type:要执行动作的目标Activity所能处理的MIME数据类型
5.component,目标组件的包或类名称
若是从BroadcastReceiver 启动一个新的Activity , 不要忘记
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
例:
public class MyReceiver extends BroadcastReceiver{ public static final String action=”acc”; public void onReceive(Context context, Intent intent) { Intent i=new Intent(context,Receivered.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
- 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
- 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。