Intent的使用

显式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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值