Intent 启动

显式Intent

Intent intent=new Intent(context,SecondActivity.class);
context.startActivity(intent);

Intent intent =new Intent();
intent.setClass(context,SecondActivity.class);
context.startActivity(intent);

隐式Intent

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activity.ACTION_START"/>
        <category android:name="android:intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Intent intent =new Intent("com.example.activity.ACTION_START");
startActivity(intent);
//一般是要<action>和<category>同时匹配上才能响应,但这能匹配上,主要是因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitytest.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="com.example.activity.MY_CATEGORY"/>
    </intent-filter>
</activity>

Intent intent=new Intent("com.example.activity.ACTION_START");
intent.addCategory("com.example.activity.MY_CATEGORY");
startActivity(intent);
//每个Intent中只能指定一个action,但却能指定多个category.

使用隐式 Intent ,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。比如要在自己的应用程序中展示浏览器

Intent intent =new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

与此对应,我们还可以在<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。不过一般在<data>标签中都不会指定过多的内容。
    <data android:scheme="http"/> //网页
    <data android:scheme="geo"/>

//Intent 传值: 四类八种 String Serialiable Bundle Parcelable
Intent intent=getIntent();

返回数据给上一个活动

//MainActivity
startActivityForResult(intent,REQUEST_CODE);
//SecondActivity
setResult(RESULT_OK,intent);
finish();   //必须在finish() 调用setResult()方法
//MainActivity
protected void onActivityResult(int requestCode,int resultCode,Intent data){
    switch(requestCode){
        case REQUEST_CODE:
            if(resultCode==RESULT_OK){
                //做该做的事了
            }
            break;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值