intent与intent filter学习

原创 2015年11月19日 16:10:35

参考网址:http://developer.android.com/intl/zh-cn/guide/components/intents-filters.html


1. intent 与intent filter的关系

intent的作用是启动目标组件,intent filter包含了被启动组件的配置信息,在清单文件中设置。

组件可在<intent-filter />中配置一些信息,表示自身被启动的条件

当一个组件启动另一个组件时,可通过intent对象设置一些信息,符合这些信息条件的组件将会被启动。


2. 显式intent与隐式intent

比如一个组件想启动另一个组件,有两种情况:

①该组件知道目标组件的名称,通过intent告诉Android系统需要启动的组件名称是XXX,则是显式intent

②该组件不知道目标组件的名称,却知道所要启动组件的条件信息,则通过 intent告诉Android系统需要启动的组件条件有哪些,则是隐式intent


注意:启动Service组件应该使用显式intent,若使用隐式intent,则不知道有哪些Service被启动,有可能造成安全隐患。


3.intent可设置的条件


①组件名称

通过setClass(),setClassName(),setComponent()或者intent的构造方法设置组件名称。


②ACTION

通过setAction()或者intent的构造方法设置启动组件的动作。


ACTION有系统ACTION与自定义ACTION,自定义ACTION可以是任意字符串,一般写成“包名+动作名”。


③Data

setData():设置数据URI,格式为<scheme>://<host>:<port>/<path>

setType():设置MIME类型,MIME类型有“text/plain”,“image/*”,“video/*”等

setDataAndType():同时设置数据URI与MIME类型时,setData()与setType()不能一起同时使用,会覆盖彼此的数据。

应用场景:比如我们现在需要启动一个能够显示图片的组件,有一个组件在清单文件中在<data />中设置了MIME类型是"image/*",则会启动MIME类型是"image/*"的组件。


e.g.

<activity android:name="MainActivity">
    <!-- This activity is the main entry, should appear in app launcher -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="ShareActivity">
    <!-- This activity handles "SEND" actions with text data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
    <!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <action android:name="android.intent.action.SEND_MULTIPLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/vnd.google.panorama360+jpg"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="video/*"/>
    </intent-filter>
</activity>

④Category  (略,日后使用了解)


⑤Extra (略,日后使用了解


⑥Flag Activity专用

setFlags():用来指定Activity如何被启动,与Activity的加载模式相对应

各参数详解:http://ivoter.iteye.com/blog/1596397


注意:若没有符合隐式Intent的Activity,则应用会崩溃,为了避免此情况发生,应在startActivity(intent)之前,判断Intent.resolveActivity(getPackageManager())是否为空。若为空,则不调用startActivity(intent)。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");

// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}


Intent.resolveActivity(getPackageManager())的源码如下:

 public ComponentName resolveActivity(PackageManager pm) {
        if (mComponent != null) {
            return mComponent;
        }

        ResolveInfo info = pm.resolveActivity(
            this, PackageManager.MATCH_DEFAULT_ONLY);
        if (info != null) {
            return new ComponentName(
                    info.activityInfo.applicationInfo.packageName,
                    info.activityInfo.name);
        }

        return null;
    }


作用是为该隐式intent产生一个专门的Activity用于备用,防止应用崩溃。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Intent和IntentFilter的区别详解

Intent   Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Int...
  • generallizhong
  • generallizhong
  • 2015年06月06日 12:08
  • 1157

Intent以及IntentFilter详解

在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度。Intent是信息的载体,用它可以去请求组件做相应的操作,但是相对于这个功能...
  • xiaohanluo
  • xiaohanluo
  • 2016年09月23日 16:05
  • 7054

Android中的Intent和Intent-filter总结

Intent中文意思指”意图”,按照Android的设计理念,Android使用Intent来封装程序的”调用意图”,不管启动Activity、Service、BroadcastReceiver,An...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年10月20日 20:29
  • 2208

intent与intent filter

Intent         是抽象的数据结构,包含了一系列描述某个操作的数据,使得程序在运行时可以在程序中不同组件间通信或启动不同的应用程序,Activity、Service、Broadcast ...
  • u013628732
  • u013628732
  • 2014年02月11日 17:46
  • 390

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文《Android中Intent概述及使用》,该文对本文要使用的action、category以及data都进行了详细介绍。本文在描述组件在manifest中...
  • sunqunsunqun
  • sunqunsunqun
  • 2015年09月16日 01:12
  • 9432

Intent的概念及应用,以及Intentfilter过滤器的选项配置

Intent包括显示Intent和隐式Intent 手动创建一个Activity: 创建一个class继承于Activity,里面要重构一个onCreat()函数,protected void o...
  • shi1451042748
  • shi1451042748
  • 2015年09月27日 17:24
  • 491

Intent与IntentFilter的区别

Intent   Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描...
  • Lucky_bo
  • Lucky_bo
  • 2015年10月13日 14:15
  • 2126

简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver .

简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver .在网上看到这篇博客,个人感觉对android的组件...
  • yangchuxi
  • yangchuxi
  • 2011年07月25日 11:26
  • 3790

简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

答:一个activity呈现了一个用户可以操作的可视化用户界面    一个service不包含可见的用户界面,而是在后台无限地运行    可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露...
  • hanchendong
  • hanchendong
  • 2016年05月15日 23:18
  • 1247

Intent与Intent Filter(下)

http://blog.csdn.net/dawanganban/article/details/19284147 接着上一篇的内容,下面我们再来看看Intent的Data与Type属性。 ...
  • u011819464
  • u011819464
  • 2014年03月15日 11:27
  • 317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:intent与intent filter学习
举报原因:
原因补充:

(最多只允许输入30个字)