在活动中使用Intent(笔记)

来源:互联网 发布:什么是java覆盖 编辑:程序博客网 时间:2024/05/21 22:41

Intent大致分成两种,显式Intent和隐式Intent。


一、显式Intent

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
  5.         startActivity(intent);  
  6.     }  
  7. }); 
第一个参数Context要求传入一个启动活动的上下文,即传入目前的活动

第二个参数是Class,即指定想要启动的目标活动


二、隐式Intent

通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,只有action和category同时匹配时这个活动才会启动

每个Intent中只能指定一个action,但却能指定多个category。

  1. <activity android:name=".SecondActivity" >  
  2.     <intent-filter>  
  3.         <action android:name="com.example.activitytest.ACTION_START" />  
  4.         <category android:name="android.intent.category.DEFAULT" />  
  5.     </intent-filter>  
  6. </activity> 

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         Intent intent = new Intent("com.example.activitytest.ACTION_START");  
  5. //这里只有action是因为category.DEFAULT是默认的category,在调用startActivity()方法时会自动将category加入。
  6.         startActivity(intent);  
  7.     }  
  8. });  


用隐式Intent打开网页

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         Intent intent = new Intent(Intent.ACTION_VIEW);  
  5.         intent.setData(Uri.parse("http://www.baidu.com"));  
  6.         startActivity(intent);  
  7.     }  
  8. });  

首先指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW。然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去。


与此对应,我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容。
1. android:scheme
用于指定数据的协议部分,如上例中的http部分。
2. android:host
用于指定数据的主机名部分,如上例中的www.baidu.com部分。
3. android:port
用于指定数据的端口部分,一般紧随在主机名之后。
4. android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
5. android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有<data>标签中指定的内容和Intent中携带的Data完全一致时(包含关系,存在的部分一致即可),当前活动才能够响应该Intent。

  1. <activity android:name=".ThirdActivity" >  
  2.     <intent-filter>  
  3.         <action android:name="android.intent.action.VIEW" />  
  4.         <category android:name="android.intent.category.DEFAULT" />  
  5.         <data android:scheme="http" />  
  6.     </intent-filter>  
  7. </activity> 
这样子的话在活动一点击时会出现:选择启动活动三或者启动浏览器进入百度页面


用隐式Intent打开拨号界面

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         Intent intent = new Intent(Intent.ACTION_DIAL);  
  5.         intent.setData(Uri.parse("tel:10086"));  
  6.         startActivity(intent);  
  7.     }  
  8. });

向下一个活动传递数据

传出

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.     String data = "Hello SecondActivity";  
  5.         Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
  6.         intent.putExtra("extra_data", data); //第一个参数是键,用于后面从Intent取值;第二个参数是要传递的数据
  7.         startActivity(intent);  
  8.     }  
  9. }); 
接收

  1. public class SecondActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  6.         setContentView(R.layout.second_layout);  
  7.         Intent intent = getIntent();  
  8.         String data = intent.getStringExtra("extra_data");  
  9.         Log.d("SecondActivity", data);  
  10.     }  

返回数据给上一个活动

请求返回数据

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
  5.         startActivityForResult(intent, 1);  //第一个参数是Intent,第二个参数是请求码,用于在之后的回调中判断数据来源
  6.     }  
  7. }); 
返回数据

  1.  button2.setOnClickListener(new OnClickListener() {  
  2.             @Override  
  3.             public void onClick(View v) {  
  4.                 Intent intent = new Intent();  
  5.                 intent.putExtra("data_return""Hello FirstActivity");  
  6. //setResult中第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则是把新构造的Intent的数据传递回去
  7.                 setResult(RESULT_OK, intent);  
  8.             }  
  9.         });  
得到数据

  1. @Override  
  2. //在返回数据的活动被销毁时,会回调上一个活动的onActivityResult()方法
  3. 第一个参数requestCode,启动活动时传入的请求码
  4. 第二个参数resultCode,即我们在返回数据时传入的处理结果
  5. 第三个参数data,携带者返回数据的Intent
  6. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  7.     switch (requestCode) {  
  8.     case 1:  
  9.         if (resultCode == RESULT_OK) {  
  10.             String returnedData = data.getStringExtra("data_return");  
  11.             Log.d("FirstActivity", returnedData);  
  12.         }  
  13.         break;  
  14.     default:  
  15.     }  
由于在一个活动中有可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到onActivityResult()这个方法中,因此我们首先要做的就是通过检查requestCode的值来判断数据来源。确定数据是从SecondActivity返回的之后,我们再通过resultCode的值来判断处理结果是否成功。最后从data中取值并打印出来,这样就完成了向上一个活动返回数据的工作。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 辐射3任务做完了怎么办 极限竞速6闪退怎么办 两个睾丸都碎了怎么办 快递退回去了钱怎么办 想登录老公微信怎么办 养狗家里味道大怎么办 实在不想养狗了怎么办 培训完不想干了怎么办 干了几天想离职怎么办 药流开始流血了怎么办 药流期间同房了怎么办 想学韩语可是没基础怎么办 鞋子多买了一双怎么办 胳膊抻着了怎么办妙招 胳膊抻筋了 很疼怎么办 干活胳膊抻筋了怎么办 胳膊上的筋扭了怎么办 一岁宝宝脖子歪怎么办 3岁宝宝轻微斜颈怎么办 2岁宝宝轻微斜颈怎么办 肩膀劳损痛的厉害怎么办 颈后面有个囊肿怎么办 扭腰了怎么办有偏方吗 跑步机点加油了怎么办 高二了英语30分怎么办 苍蝇往人身上飞怎么办 25岁了写字好丑怎么办 我字写得超难看怎么办 高三体检有纹身怎么办 快高考了有纹身怎么办 艺考身上有纹身怎么办 初三考试考砸了怎么办 考差了我该怎么办 发票认购簿丢了怎么办 税率开错为17%了怎么办 增值税票开错了怎么办 发票名字写错了怎么办 红米2卡开机画面怎么办 三星s4字库坏了怎么办 百度云上传很慢怎么办 入户网线头断了怎么办