欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

如何使用隐式Intent

程序员文章站 2022-03-12 09:24:33
使用隐式Intent相比于显式 Intent, 隐式 Intent则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和 category等信息,然后交由系统去分析这个Intent ,并帮我们找出合适的活动去启动。什么叫作合适的活动呢?简单来说就是可以响应我们这个隐式 Intent 的活动,那么目前ScondActivity可以响应什么样的隐式 Intent呢?额,现在好像还什么都响应不了,不过很快就会有了。通过在标签下配置的内容...

使用隐式Intent

相比于显式 Intent, 隐式 Intent则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的actioncategory等信息,然后交由系统去分析这个Intent ,并帮我们找出合适的活动去启动。

什么叫作合适的活动呢?简单来说就是可以响应我们这个隐式 Intent 的活动,那么目前ScondActivity可以响应什么样的隐式 Intent呢?额,现在好像还什么都响应不了,不过很快就会有了。

通过在<activity>标签下配置的内容,可以指定当前活动能够响应的action和 category,打开AndroidManifest.xml,添加如下代码:

		<activity android:name=".Secondsctivity">
			<intent-filter>
				<action android:namne="com.example.activitytest.ACTION START"/>
			</intent-filter>
		</activity>

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

修改FirstActivity中按钮的点击事件,代码如下所示:

button1.setOnClickListener(new View. OnClickListener() {
	@override
	public void onClick(View v) {
		Intent intent = new Intent("com. example. activitytest . ACTION_START");
		StartActivity(intent);
	}
});

可以看到,我们使用了Intent 的另一个构造函数,直接将action的字符串传了进去,表明我们想要启动能够响应com. example. activitytest.ACTION_START 这个action的活动。那前面不是说要<action><category>同时匹配上才能响应的吗?怎么没看到哪里有指定category呢?这是因为android. intent. category . DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。

重新运行程序,在FirstActivity的界面点击一下按钮, 你同样成功启动SecondActivity了。不同的是,这次体是使用了隐式Intent的方式来启动的,说明我在<activity>标签下配畳的action和category的内容已经生效了!

毎个Intent中只能指定一个 action,但却能指定多个category。目前我们的Intent中只有一个默认的category,那么现在来増加一个吧。

修改FirstActivity中按钮的点击事件,代码如下所示:

button1. setOnClickListener(new View. OnClickListener() {
	@Override
	public void onClick(View v) {
		Intent intent = new Intent (" com. example. activitytest .ACTION_START");
		intent. addCategory ("com . example . activitytest .MY_ CATEGORY");
		StartActivity(intent);
		}
});

可以调用Intent中的addCategory()方法来添加一个category,这里我们指定了一个自定义的category,值为com. example. activitytest .MY_ CATEGORY。

现在重新运行程序,在FirstActivity的界面点击一下按钮,你会发现,程序崩溃了!这是你第一次遇到程序崩溃,可能会有些束手无策。别紧张,其实大多数的崩溃问题都是很好解决的。

错误信息中提醒我们,没有任何一个活动可以响应我们的Intent, 为什么呢?这是因为我们刚刚在Intent中新增了一个category,而SecondActivity的<intent- filter>标签中并没有声明可以响应这个category, 所以就出现了没有任何活动可以响应该Intent 的情况。现在我们在<intent- filter>中再添加一个category的声明,如下所示:

	<activity android:name=" . SecondActivity" >
		<intent-filte r>
			<action android: name=" com. example . activitytest. ACTION START" />
			<category android: name=" android . intent. category.DEFAULT" />
			<category android:name="com. example.activitytest .MY_ CATEGORY"/>
		</intent- filter>
	</activity>

再次重新运行程序,你就会发现一切都正常了。

本文地址:https://blog.csdn.net/YJNZHA/article/details/107123303