关闭

Intent的使用

468人阅读 评论(0) 收藏 举报

显式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 FilterHOME种类而不指定动作的话,你正在将其设为本地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>

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32553次
    • 积分:694
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论