intent-filter详解
发布日期:2021-06-30 11:23:12 浏览次数:2 分类:技术文章

本文共 3150 字,大约阅读时间需要 10 分钟。

main.xml如下:

another.xml如下:

 

MainActivity如下:

package cn.com.bravesoft.testactivity4;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/*** 利用隐式意图激活组件的测试笔记* 在利用隐式意图激活组件时常用action category data进行匹配* 测试1:* 代码中设置为:* Intent intent = new Intent();* intent.setAction("cn.com.bravesoft.testAction");* startActivity(intent);* Manifest文件中设置:*  
*
*
* 结果:* 报错,无法激活组件* 原因:* 在intent设置action的时候会默认给改intent设置一个默认的category即* 相当于会自动执行:intent.addCategory("android.intent.category.DEFAULT");* 解决:* 在
中设置category即*
* 这样就可以匹配到* 总结:* 在代码中的intent和manifest中的
均为设置data的情况下* 只要代码中intent的action和category均出现在了那么就* 可以激活组件* * 测试2:* 关于data的匹配测试* 在测试1中可以看到如果我们在代码中没有设置category那么系统会自动添加一个* 默认category即android.intent.category.DEFAULT.* 但是如果在意图对象或manifest中设置了data而另一方没有设置data,那么无论如何是不能匹配的* 关于该点不再单独测试* 关于数据的匹配常用到scheme host path* 比如在http://www.bravesoft.com.cn/android中* scheme是http* host是www.bravesoft.com.cn* path是/android* 此时代码如下:* Intent intent = new Intent();* intent.setAction("cn.com.bravesoft.testAction");* intent.setData(Uri.parse("http://www.bravesoft.com.cn/android"));* startActivity(intent);* manifest的
如下:*
*
*
*
*
* 此时可以匹配的* * 测试3:* 在测试2的基础上继续测试* 关于数据的匹配除了常用到scheme host path,有时还会采用mimeType* 为
添加了mimeType即* 为了匹配该意图所以在代码中设置了intent.setType("image/gif");* 此时代码如下:* Intent intent = new Intent();* intent.setAction("cn.com.bravesoft.testAction");* intent.setData(Uri.parse("http://www.bravesoft.com.cn/android"));* intent.setType("image/gif");* * manifest的
如下:*
*
*
*
*
*
* 结果:* 无法匹配* 原因:* 在调用setType的时候会自动清除setData所设置的内容,即setData失效* 解决:* 当manifest中的
除了设置scheme host path外还* 设置了mimeType时在代码中需要intent.setDataAndType将这些必须的* 东西同时设置.* 此时代码如下:* Intent intent = new Intent();* intent.setAction("cn.com.bravesoft.testAction");* intent.setDataAndType(Uri.parse("http://www.bravesoft.com.cn/android"), "image/gif");* startActivity(intent);* manifest的
如下:*
*
*
*
*
*
*/public class MainActivity extends Activity { private Button mButton; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(new ButtonOnClickListener()); } private class ButtonOnClickListener implements OnClickListener { public void onClick(View v) { Intent intent = new Intent(); intent.setAction("cn.com.bravesoft.testAction"); intent.setDataAndType(Uri.parse("http://www.bravesoft.com.cn/android"), "image/gif"); startActivity(intent); } } }

AnotherActivity如下:

package cn.com.bravesoft.testactivity4;import android.app.Activity;import android.os.Bundle;public class AnotherActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.another);      	}	}

AndroidManifest如下:

 

 

转载地址:https://it9527.blog.csdn.net/article/details/8946472 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GridView使用示例(三)
下一篇:Android事件传递机制(笔记)deprecated

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月16日 06时06分47秒