Android自学笔记-14-意图(Intent)

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:28 我要评论(0)

Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。Android中的Intent可以理解为不同组件通信的媒介或者信使。所以Intent的主要作用就是调用起来一个Activity或者Service等。

意图分为显示意图和隐式意图。一般对于显示意图使用是比较方便的,如果我们调用的使我们自己的Activity,则可以直接启动就可以了,如果调用的是其他的Activity,这时候我们就需要获取到我们要启动的Activity的包名和类名,然后调用。

对于自己写的Activity可以按照如下方法调用:

Intent intent = new Intent(this, SecondActivity.class);

startActivity(intent);如果需要调用别人的Activity,我们需要确定包名类名。但是有时候我们不清楚Activity的包名类名,这时候我们需要在设备上或者模拟器上点击一下我们想要调用的Activity,这里以浏览器为例,这时候在logcat中会打印出如下输出:02-24 23:11:19.652: I/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity } from pid 137

这时候我们需要关注的是cmp=com.android.browser/.BrowserActivity,通过这个我们能够确定包名为com.android.browser,类名为com.android.browser.BrowserActivity,这时候就可以通过如下代码调用起Activity:

Intent intent = new Intent();

intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");

startActivity(intent);上面介绍的都是显示意图,但是显示意图也有其缺点,如果我们调用别人的Activity,如果别人的包名类名改了,这时候我们调用就会失败,为了应对这种情况,Android中提供的隐式意图,对于隐式意图我们在调用的时候需要给我们的Intent配置很多参数,然后Android系统会根据这些参数去调用对应的Activity(对于隐式意图的详细解释,还请百度)。如果某个Activity想通过隐式意图的方式被调用,必须在其AndroidManifest.xml中配置对应的参数,我这里有一个配置例子如下: 这里配置了一个Activity,并且使其能够通过隐式意图调用,下面是调用的代码: Intent intent = new Intent();

intent.setAction("com.mxy.intenttest");

/**添加类别:startActivity(intent)启动Activity时会自动添加

* android.intent.category.DEFAULT类别,所以需要在Manifest中

* 配置该类别.但在程序中不需要明确添加该类别

* 只有当Intent请求中所有的Category与组件中某一个IntentFilter的完全匹配时,

* 才会让该 Intent请求通过测试,IntentFilter中多余的声明并不会导致匹配失败。

* 一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。*/

//intent.addCategory("android.intent.category.DEFAULT");

/**设置数据:API中说这个方法会将setType的方法设置的类型清除掉*/

intent.setData(Uri.parse("http://www.andyidea.com:8080/person"));

/**设置类型:API中说这个方法会将setData上面的方法设置的数据清除掉*/

intent.setType("vnd.androd.cursor.item/test");

/**同时设置数据和类型:如果Intent过滤器中同时包含数据和数据类型的设置

* 就只能使用该方式来设置数据和类型*/

intent.setDataAndType(Uri.parse("http://www.andyidea.com:8080/person"), "vnd.androd.cursor.item/test");

startActivity(intent);上面的代码是调用自己写的Activity,其实Android系统也提供了很多的隐式意图供我们调用,下面就是一个例子: Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

介绍完了意图,同时在两个Activity的切换的过程中经常会涉及到传值,对于传值同样也需要使用Intent。如果我们想把一个值传递到待启动的Activity中,需要按照如下格式写: Intent intent = new Intent(this, SecondActivity.class);

intent.putExtra("name", "mengxiangyue");

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...