Android Intent 用法

Intent :英文翻译为“意图”

含义也差不多,可以理解为要启动一个或者另一个Activity的“意图”。
当然,启动一个Activity首先需要new Intent();
随后使用startActivity(Intent);来启动这个Activity

Intent 给我们提供了以下几种构造方法。

public Intent(Context packageContext, Class<?> cls)
public Intent(String action, Uri uri)
public Intent(String action)
public Intent(String action, Uri uri, Context packageContext, Class<?> cls)

第一个构造方法:显式调用
Context : 给定启动Activity的上下文
Class : 需要启动的Activity(显示指定的Activity)
例如: 我们要在MainActivity中启动Target Activity

    Intent intent = new Intent(MainActivity.this, TargetActivity.class);
    startActivity(intent);

第二和第三个构造皆为隐式调用
action : 为AndroidManifest.xml中注册的Activity里的intent-filter中指定的action
注 : 使用隐式调用同时需要actioncategory同时匹配上才能调用成功。
隐式调用需要进行如下配置

    <intent-filter>
        <!-- action android:name里的值可以自定义-->
        <action android:name="com.sun.scarecrow.ACTION_TEST"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <!-- category android:name里的值可以自定义-->
        <category android:name="com.sun.scarecrow.CATEGORY_TEST"/>
    </intent-filter>

使用:每个intent只能指定要给action,但却能指定多个category

Intent intent= new Intent("com.sun.scarecrow.ACTION_TEST");
intent.addCategory("com.sun.scarecrow.CATEGORY_TEST");

注: 因为android.intent.category.DEFAULT为默认的categoriesgory,在调用start Activity()的时候会自动将这个category添加到intent中。
所以如果没有自定义的category的时候可以省略intent.addCategory();。但是xml中的默认category是必须的,不能省略。一旦缺失将不符合隐式匹配规则(* 只有<action>和<category>同时匹配上才能正常响应 *)。
将会出现如下异常:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.sun.scarecrow.ACTION_TEST cat=[com.sun.scarecrow.CATEGORY_TEST] }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值