显式Intent 显式Intent会在自己的说明中直接声明由哪个Activity来接收 处理这个Intent。 //告诉Android,此Intent交由AlertDialog处理 Intent intent = new Intent(); intent.putExtra("name", editText.getText().toString()); //也可以通过setComponent()、setClassName()等方法来做 intent.setClass(ActivityLifecycle.this, AlertDialog.class); 隐式Intent 隐式Intent没有明确的目标,只是描述了一下自己的情况 Intent intent = new Intent(); intent.putExtra("name", editText.getText().toString()); //在AndroidManifest中找intent-filter中action为com.roiding.sample.action.MAIN intent.setAction("com.roiding.sample.action.MAIN"); 1.在AndroidManifest文件中,对每个Activity都做了说明,就是intent-filter,它说明了当前这个Activity接收什么样的需求,这样当Intent与这个Intent-filter中的说明一致时,Intent就找到了Activity。 2.如果有多个 Activity成为候选,那么在程序运行的时候Android提示你从多个Activity中手动选择一个来作为最终的intent接收执行者。 3.对于Activity来说,在它的intent-filter中,可以有多个action,多个category,多个data,这样可以有多个Intent可以与之匹配。 4.data 动作操作的数据,这部分数据携带给接收它的Activity,Uri格式。和extras功能差不多。 data的重要的作用就是,它提供了一种反向挑选的机制,使 Activity对Intent也可以提出要求,要求Intent的data必须是intent-filter中声明的data中之一(因为可以有多个 data)。这点是非常重要的,不然又会出现ActivityNotFoundException之类的错误了。 AndroidManifest中intent-filter参数解释 在Intent Filter节点里使用下面的标签(关联属性),你能指定组件支持的动作、种类和数据: ❑ action
使用android:name特性来指定对响应的动作名。动作名必须是独一无二的字符串,所以,一个好的习惯是使用基于Java包的命名方式的命名系统。
❑ category
使用android:category属性用来指定在什么样的环境下动作才被响应。每个Intent Filter标签可以包含多个category标签。你可以指定自定义的种类或使用Android提供的标准值,如下所示:
❑ ALTERNATIVE
你将在这章的后面所看到的,一个Intent Filter的用途是使用动作来帮忙填入上下文菜单。ALTERNATIVE种类指定,在某种数据类型的项目上可以替代默认执行的动作。例如,一个联系人的默认动作时浏览它,替代的可能是去编辑或删除它。
❑ SELECTED_ALTERNATIVE
与ALTERNATIVE类似,但ALTERNATIVE总是使用下面所述的Intent解析来指向单一的动作。SELECTED_ALTERNATIVE在需要一个可能性列表时使用。
❑ BROWSABLE
指定在浏览器中的动作。当Intent在浏览器中被引发,都会被指定成BROWSABLE种类。
❑ DEFAULT
设置这个种类来让组件成为Intent Filter中定义的data的默认动作。这对使用显式Intent启动的Activity来说也是必要的。
❑ GADGET
通过设置GADGET种类,你可以指定这个Activity可以嵌入到其他的Activity来允许。
❑ HOME
HOME Activity是设备启动(登陆屏幕)时显示的第一个Activity。通过指定Intent Filter为HOME种类而不指定动作的话,你正在将其设为本地home画面的替代。
❑ LAUNCHER
使用这个种类来让一个Activity作为应用程序的启动项。
❑ data
data标签允许你指定组件能作用的数据的匹配;如果你的组件能处理多个的话,你可以包含多个条件。你可以使用下面属性的任意组合来指定组件支持的数据:
❑ android:host
指定一个有效的主机名(例如,com.google)。
❑ android:mimetype
允许你设定组件能处理的数据类型。例如,<type android:value=”vnd.android.cursor.dir/*”/>能匹配任何Android游标。
❑ android:path
有效地URI路径值(例如,/transport/boats/)。
❑ android:port
特定主机上的有效端口。
❑ android:scheme
需要一个特殊的图示(例如,content或http)。 显示了如何配置Activity的Intent Filter,使其以在特定数据下的默认的或可替代的动作的身份来执行SHOW_DAMAGE动作 <activity android:name=”.EarthquakeDamageViewer” android:label=”View Damage”>
<intent-filter>
<action android:name=”com.paad.earthquake.intent.action.SHOW_DAMAGE”> </action>
<category android:name=”android.intent.category.DEFAULT”/>
<category android:name=”android.intent.category.ALTERNATIVE_SELECTED”/>
<data android:mimeType=”vnd.earthquake.cursor.item/*”/>
</intent-filter>
</activity> |