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用于备用,防止应用崩溃。


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

相关文章推荐

Android学习之路(五)之 Intent-Filter简介及URI

Intent-Filter简介及URI Intent-Filter又称意图过滤器,在Intent-Filter中存在三个属性,分别是action、category、data,在activity类中进行...

Android开发笔记----Activity再学习(生命周期、启动模式、intent-filter)

本文参考了任玉刚前辈的《Android开发艺术探索》一书,可以说是该书相关内容的读书笔记。 (一) Activity生命周期: 正常启动:onCreate->onStart->onResume ...

Android Intent Filter用法

  • 2016年01月23日 14:08
  • 1.79MB
  • 下载

Android解析Intent Filter详细过程

当在startActivity中传入一个隐式的Intent时,决定启动哪个Activity的过程称为intent解析,intent解析的过程是为了通过一下的具体步骤找到合适的Intent Filter...
  • xdwyyan
  • xdwyyan
  • 2014年11月05日 11:00
  • 681

Intents 和Intent filter 理论介绍

  • 2010年09月15日 23:22
  • 71KB
  • 下载

android中intent-filter的分析和具体使用用例

意图过滤器(intent-filter)由清单文件中的元素定义,嵌入在相应的应用组件里(例如元素),在元素里,你可以使用这3个元素中的一个或多个来指定接收的意图类型: 在name属性里,声明接收的意图...

Android Intent-filter意图过滤器

隐式调用在前文 Android activity四种启动模式及Flag 中我们知道启动一个activity是可以通过activity.startActivity ( intent )来显式调用 启动的...
  • cch1024
  • cch1024
  • 2016年10月13日 11:55
  • 184

Intent Filter匹配规则

Intent简介        Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此In...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:intent与intent filter学习
举报原因:
原因补充:

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