intent小结

Intent总结01 Intent的结构


Intent对象由componentActionDataCategoryComponentExtra等属性组成组成。下面,分别对各个属性进行介绍说明。

 

1 Component 

    明确指定类名,用于跳转。通过setComponent(ComponentName)setClass(Context, Class)等设置Intentcomponent(即组成成分),来指定一个明确的类进行跳转。通过设置componentintent是显式意图,即Explicit Intents;其余的都是隐式意图,Implicit Intents

2 Action 

    规定了Intent要完成的动作,是一个字符串常量。可以通过setAction()来设置Action属性,getAction()来获得Action属性。使用Action时,我们既可以使用系统内置的Action,也可以自己定义。系统自定义的action,如ACTION_VIEW, ACTION_EDIT, ACTION_MAIN等等。

3 Data 

    设置intent的数据,该数据一般用Uri封装。

    下面,介绍几组 action/data的示例:

    ACTION_VIEW content://contacts/people/1   -- 进入联系人查看界面,并显式id1的联系人的信息。

    ACTION_EDIT  content://contacts/people/1   --进入联系人编辑界面,并编辑id1的联系人的信息。

    ACTION_DIAL  content://contacts/people/1   --进入拨号程序,并输入id1的联系人的号码。

4 Type 

    明确指定了要操作的intent数据类型。通常在data中就暗含了type类型。通过设置intenttype,我们能过滤掉type不同的intent。如mp4对应的type"video/mp4"mp3type“audio/x-mpeg”

5 Extras

    设置intent的附加数据,通常用来传递除“data”“type”之外的额外内容。例如:booleanint等基本类型数据或它们对应的数组、bundle对象、以及parcelableseriable对象。parcelableseriable对象可以参考”Android Bundle总结“。

6 Category

    附加到action上的额外信息。例如“android.intent.category.LAUNCHER”表示将该activity的图标在主界面的程序列表中显示,“android.intent.category.DEFAULT”是通过隐式intents来查找该类的必备属性。

 

总体来说:

01)若只是单纯的跳转到目标类,而不传递任何数据:可以通过设置component进行显示跳转;亦可以只设置action进行隐式跳转。

             如通过显式意图跳转,则直接在调用时通过API来进行component的设置。参考Intent总结02 component和显式意图

             如通过隐式意图跳转,则先在目标类对应的AndroidManifest.xml中注册对应的action,然后在调用时通过API设置ation进行跳转。参考"Intent总结02 component和显式意图"

02datatypeextra主要用于传递额外的参数。。

             它们之间的区别:

             data主要用来传递Uri数据,例如“http地址拨打联系人的号码“SQL语句等;关于Uri的详细说明,可以参考Intent总结04 Data和Type属性

             type主要是用来系统data的类型,如查找数据时,是查找集合,还是查找某条记录;如,不同格式的音乐对应的type也不同。参考"Intent总结04 Data和Type属性"

             extra主要用来传递booleanbyteintstring等基本类型或它们的数组,bundle对象,parcelableseriable对象。参考"Intent总结05 extra属性"

03category:附加的额外信息。例如,若要通过隐式意图查找某activity,则在该activity对应的AndroidManifest.xml中注册intent-filter时,必须加上“android.intent.category.DEFAULT”。参考"Intent总结06 category属性"

component和显式意图

1 介绍

显式意图,即Explicit Intents。显式意图通过component明确指定类名,用于跳转。通常用到的APIsetComponent(ComponentName)setClass(Context, Class)等。
 
常用的显示意图跳转方法说明
方法01:通过构造函数Intent(ContextpackageContext, Class<?> cls),直接指定目的类。

 
 
  1. //jump Method - 01 : Intent(Context packageContext, Class<?> cls)  
  2. Intentintent = new Intent(Activity01.this, Activity02.class);  
  3. startActivity(intent);  
方法02:通过setClass (Context packageContext,Class<?> cls)指定目的类
  1. //jump Method - 02 : setClass (Context packageContext, Class<?> cls)  
  2. Intentintent = new Intent().setClass(Activity01.this, Activity02.class);  
方法03:通过setClassName (String packageName,String className)指定目的类

 
 
  1. //jump Method - 03 : setClassName (String packageName, String className)  
  2. Intentintent = new Intent().setClassName("com.test","com.test.Activity02");  
  3. startActivity(intent);  
方法04:通过setComponent(ComponentNamecomponent)
  1. // jump Method - 04 :setComponent(ComponentName component)  
  2. ComponentName cn = new ComponentName("com.test","com.test.ExplicitDestination");  
  3. Intent intent = new Intent();  
  4. intent.setComponent(cn);  
  5. startActivity(intent);  

Intent总结03Action属性

 

Action 规定了Intent要完成的动作,是一个字符串常量。使用setAction()来设置Action属性,使用getAction()来获得Action属性。既可以使用系统内置的Action,也可以自己定义。系统自定义的action,如ACTION_VIEW, ACTION_EDIT, ACTION_MAIN等等。
 

1.自定义Action

在“目的Activity”的AndroidManifest.xml中指定action常量。 
  1. <activity android:name=".ActionDestination">  
  2.    <intent-filter>  
  3.        <action android:name="Skywang_ACTION" />  
  4.        <category android:name="android.intent.category.DEFAULT"/>  
  5.    </intent-filter>  
  6. </activity>  

<categoryandroid:name="android.intent.category.DEFAULT" />的作用是用来说明,可以通过隐式跳转(即其它类调用setAction("Skywang_ACTION"))来找到ActionDestination这个activity。这样,其它的类就可以通过下面的代码跳转到ActionDestination。跳转时,setAction的字符串"Skywang_ACTION"必须与AndroidManifest.xml中定义的"Skywang_ACTION"一致。
  1. Intent intent = new Intent();    
  2. intent.setAction("Skywang_ACTION");    
  3. startActivity(intent);  

2系统Action

  1. // 流量网页  
  2. Uri uri =Uri.parse("http://www.baidu.com");   
  3. Intent intent = newIntent(Intent.ACTION_VIEW, uri);    
  4. startActivity(intent);<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  
  1. // 拨打电话  
  2. // if you want to use ACTION_DIAL, you mustadd permissin in manifest, the permission is bellow  
  3. // <uses-permissionandroid:name="android.permission.CALL_PHONE" />  
  4. Uri uri = Uri.parse("tel:12580");   
  5. Intent it = new Intent(Intent.ACTION_DIAL,uri);   
  6. startActivity(it);  
  1. // 发送短信  
  2. Uri uri = Uri.parse("smsto:13410177756");   
  3. Intent it = newIntent(Intent.ACTION_SENDTO, uri);   
  4. it.putExtra("sms_body""TheSMS text");   
  5. startActivity(it);  

 
 
  1. //播放mp3  
  2. Intent it = new Intent(Intent.ACTION_VIEW);   
  3. Uri uri =Uri.parse("file:///sdcard/song.mp3");    
  4. it.setDataAndType(uri, "audio/mp3");   
  5. startActivity(it);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值