android学习笔记——Intent


Intent寻找目标组件的两种方式:
     显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
     隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间

1、显式Intent  
一 般情况下,一个Android应用程序中需要多个屏幕,即是多个Activity类,并且在这些Activity之间进行切换通过Intent机制来实现 的。在同一个应用程序中切换Activity时,我们通常都知道要启动的Activity具体是哪一个,因此常用显式的Intent来实现的。
public void onClick(View v) {
//显示方式声明Intent,直接启动SecondActivity
Intent it = new Intent(MainActivity.this,SecondActivity.class);
//启动Activity
startActivity(it);
}
AndroidManifest.xml清单文件,行为SecondActivity在清单文件里的声明
<activity android:name=".MainActivity"
     android:label="@string/app_name">
     <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>
<activity android:name=".SecondActivity"
     android:label="@string/app_name">
</activity>

2、隐式Intent
下面是同一应用程序中的Activity切换的例子,需要AndroidManifest.xml中增加Activity的声明,并设置对应的Intent Filter和Action,才能被Android的应用程序框架所匹配。
public void onClick(View v) {
// 实例化Intent
Intent it = new Intent();
//设置Intent的Action属性
it.setAction("com.android.activity.MY_ACTION");
// 启动Activity
startActivity(it);
}

AndroidManifest.xml 文件的18,19行修改了Intent Filter,这样SecondActivity才能够接收到MainActivity发送的Intent。因为在MainActivity的 Intent发送的动作为"com.android.activity.MY_ACTION",而在18行里,SecondActivity设置的 Action也为"com.android.activity.MY_ACTION",这样就能进行匹配。
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name = "com.android.activity.MY_ACTION" />
<category android:name = "android.intent.category.DEFAULT" />
</intent-filter>
</activity>
 
对于显示Intent,Android不需要再去做解析,因为目标组件很明确。Android需要解析的是隐式Intent,通过解析,将Intent映射 给可以处理该Intent的Activity,Service等。Intent的解析机制主要是通过查找已经注册在 AndroidManifest.xml中的所有IntentFilter以及其中定义的Intent,最终找到匹配的Intent。

使用Intent传递数据

向下一个活动传递数据
String data = "Hello second activity";
Intent intent = new Intent(MainActivity.this,SecondActivity.class);//显示调用,
                                      这里也可以使用Intent.的不同参数并配合intent.setData(Uri.parse("tel:10086"));
                                      来进行跨应用的调用。
intent.putExtra("extra_data",data);
startActivity(intent);

在SecondActivity中获取传递的数据
Intent intent = getIntent();//获取到启动SecondActivity的intent
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);

返回数据给上一个活动
就是在启动这个活动的时候需要做一些改变
由startActivity(intent);
改变为:startActivityForResult(intent,1);
第一个参数还是intent,这里是为了指向下一个活动。 第二个参数是请求码,用于在之后的回调中判断数据的来源

那么,当下一个活动销毁时我们就需要在上层活动中进行接收,重写一下这个方法:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
     switch(requestCode){
          case 1:
               if(resultCode == RESULT_OK)
               ....;
               break;
          default;
     }
}

在下一个活动中也要做相应的修改
Intent intent = new Intent();//这里也可以使用上一活动传递下来的intent--getIntent()
intent.putExtra("key",value);
setResult(RESULT_OK,intent);//这里的intent就是为了传递一个数据,没有指向别的活动。
finish();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值