Intent

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:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。

 

猜你喜欢

转载自jishudaren.iteye.com/blog/2298596