Intent初识

Intent介绍

Intent是Android程序中各组件之间进行交互的一种重要方式,作用于指出当前组件想要执行的动作以及不同组件之间的数据传递。一般用于启动Activity、启动Service以及发送广播等场景。我们把Intent创建分为两种方式,显式Intent以及隐式Intent

显式Intent

我们先来看如下的构造函数:Intent(Context packageContext, Class<?>cls)

这是一个有两个参数的Intent构造函数,显式Intent中,我们常用该构造函数创建Intent,第一个参数Context要求提供一个启动活动的上下文,例如MainActivity等,第二个参数Class是指定想要启动的目标Activity,从这个构造函数就可以看出,构造出的Intent”意图"很明显,指定了目标Activity,因此这种方式叫做显式Intent。

同时如何使用该Intent呢?Activity类提供了一个startActivity()方法,专门用于启动活动。以下作为一个启动Activity的案例,以button点击事件为利

button.setClickListener(new View.OnClickListener()){
    @Override
    public void onClick(View view){
        Intent intent = new Intent(ActivityOne.this,ActivityTwo.class);
        startActivity(intent);
    }
}

隐式Intent

显式Intent明确指出目标,而隐式Intent相比来说含蓄一点,它的目标并没有明确指出,而是指定了一系列更为抽象的action和category等信息,然后由系统去分析这个Intent,并帮我们去找出合适的Activity、Service等。下面介绍,如何配置使用隐式Intent。

同样以启动一个Activity为例,我们在使用隐式Intent启动一个Activity前,需要对这个Activity配置 <intent-filter> ,我们通过<intent-filter>来指定当前Activity能够响应的action和category,我们在注册表AndroidManifest.xml配置<intent-filter>,案例如下:

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

上面的代码中,我们指定了ActivityTwo可以响应com.example.activitytest.ACTION_START这个action,而标签则包含了一些附加信息,更精确的指出ActivityTwo能够响应的Intent中还可能带有category。只有action和category中的内容能够同时匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

而此时,ActvityOne中Button点击事件代码如下:

button.setOnClickListener(new View.OnClickListener()){
	@Override
	public void onClick(View view){
        Intent intent = new Intent("com.example.activitytest.ACTION_START");
        startActivity(intent);
    }
}

上述代码中并没指定category,这是因为默认的category就是android.intent.category.DEFAULT

需要注意的是,每个Intent中只能指定一个action,但是可以指定多个category。

下面我们介绍Intent的更多用法。使用隐式Intent,不仅仅可以启动自己程序内Activity,还可以启动其他程序的Activity,我们使用Intent中的setData()方法来传递Uri对象,调用系统浏览器,代码如下:

button.setOnClickListener(new View.OnClickListener()){
	@Override
	public void onClick(View view){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);
    }
}

除了action、category之外还有data属性,同样是在中配置标签的,可以配置以下内容:

android:scheme
android:host
android:port
android:path
android:mineType
posted @ 2021-08-22 22:38  Milo196  阅读(82)  评论(0编辑  收藏  举报