`
ming_fanglin
  • 浏览: 227118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

intent intent-filter intent filer

阅读更多
应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个Intent Filter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求数据。比如之前请求网页浏览器这个例子中,网页浏览器程序的Intent Filter就应该声明它所希望接收的Intent Action是WEB_SEARCH_ACTION,以及与之相关的请求数据是网页地址URI格式。如何为组件声明自己的Intent Filter? 常见的方法是在AndroidManifest.xml文件中用属性<Intent-Filter>描述组件的Intent Filter。

前面我们提到,隐式Intent(Explicit Intents)和Intent Filter(Implicit Intents)进行比较时的三要素是Intent的动作、数据以及类别。实际上,一个隐式Intent请求要能够传递给目标组件,必要通过这三个方面的检查。如果任何一方面不匹配,Android都不会将该隐式Intent传递给目标组件。接下来我们讲解这三方面检查的具体规则。

1.动作测试
<intent-filter>元素中可以包括子元素<action>,比如: 
<intent-filter> 
<action android:name=”com.example.project.SHOW_CURRENT” /> 
<action android:name=”com.example.project.SHOW_RECENT” /> 
<action android:name=”com.example.project.SHOW_PENDING” /> 
</intent-filter> 

一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通过了这条<intent-filter>的动作测试。如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。
(1) 如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent- filter>匹配;
(2) 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个 Intent请求就将顺利地通过<intent-filter>的行为测试。
2.类别测试
<intent-filter>元素可以包含<category>子元素,比如: 
<intent-filter . . . > 
<category android:name=”android.Intent.Category.DEFAULT” /> 
<category android:name=”android.Intent.Category.BROWSABLE” /> 
</intent-filter> 

只有当Intent请求中所有的Category与组件中某一个IntentFilter的<category>完全匹配时,才会让该 Intent请求通过测试,IntentFilter中多余的<category>声明并不会导致匹配失败。一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。
3.数据测试

数据在<intent-filter>中的描述如下:
<intent-filter . . . > 
<data android:type=”video/mpeg” android:scheme=”http” . . . /> 
<data android:type=”audio/mpeg” android:scheme=”http” . . . /> 
</intent-filter> 

<data> 元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、 authority和path。其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。
4.简单例子说明

讲解完Intent基本概念之后,接下来我们就使用Intent激活Android自带的电话拨号程序,通过这个实例你会发现,使用Intent并不像其概念描述得那样难。最终创建Intent的代码如下所示。
Intent i = new Intent(Intent.ACTION_DIAL,Uri.parse(”tel://13800138000″));
创建好Intent之后,你就可以通过它告诉Android希望启动新的Activity了。
startActivity(i);
Activity启动后显示界面如下:


5.总结说明

这篇文章是我刚开始学习Android时看到的,当时理解的不是很深入,现在再回头看这篇文章总结的很详细,在这里与大家分享。



1,掉web浏览器

Uri myBlogUri = Uri.parse("http://kuikui.iteye.com"); 

returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri); 




2,地图
Uri mapUri = Uri.parse("geo:38.899533,-77.036476"); 

returnIt = new Intent(Intent.ACTION_VIEW, mapUri); 




3,调拨打电话界面
Uri telUri = Uri.parse("tel:100861"); 

returnIt = new Intent(Intent.ACTION_DIAL, telUri); 




4,直接拨打电话
Uri callUri = Uri.parse("tel:100861"); 

returnIt = new Intent(Intent.ACTION_CALL, callUri); 




5,卸载
Uri uninstallUri = Uri.fromParts("package", "xxx", null); 

returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); 




6,安装
Uri installUri = Uri.fromParts("package", "xxx", null); 

returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); 




7,播放

Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3"); 

returnIt = new Intent(Intent.ACTION_VIEW, playUri); 




8,掉用发邮件
Uri emailUri = Uri.parse("mailto:shenrenkui@gmail.com"); 

returnIt = new Intent(Intent.ACTION_SENDTO, emailUri); 




9,发邮件
returnIt = new Intent(Intent.ACTION_SEND); 

String[] tos = { "shenrenkui@gmail.com" }; 

String[] ccs = { "shenrenkui@gmail.com" }; 

returnIt.putExtra(Intent.EXTRA_EMAIL, tos); 

returnIt.putExtra(Intent.EXTRA_CC, ccs); 

returnIt.putExtra(Intent.EXTRA_TEXT, "body"); 

returnIt.putExtra(Intent.EXTRA_SUBJECT, "subject"); 

returnIt.setType("message/rfc882"); 

Intent.createChooser(returnIt, "Choose Email Client"); 




10,发短信

Uri smsUri = Uri.parse("tel:100861"); 

returnIt = new Intent(Intent.ACTION_VIEW, smsUri); 

returnIt.putExtra("sms_body", "shenrenkui"); 

returnIt.setType("vnd.android-dir/mms-sms"); 




11,直接发邮件

Uri smsToUri = Uri.parse("smsto://100861"); 

returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri); 

returnIt.putExtra("sms_body", "shenrenkui"); 




12,发彩信

Uri mmsUri = Uri.parse("content://media/external/images/media/23"); 

returnIt = new Intent(Intent.ACTION_SEND); 

returnIt.putExtra("sms_body", "shenrenkui"); 

returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri); 

returnIt.setType("image/png"); 




用获取到的Intent直接调用startActivity(returnIt)就ok了。
2
0
分享到:
评论

相关推荐

    android intent and intent-filters

    当发送一个隐式Intent时,AMS会遍历所有声明了对应Intent-filter的组件,使用PackageParser的matchIntent()方法进行匹配,最终找到最合适的组件。 1. 匹配流程: - AMS接收到Intent后,调用`resolveActivity()`...

    Data、Type属性与Intent-filter配置

    Intent-filter的配置对于正确地启动和接收意图至关重要。在给定的标题“Data、Type属性与Intent-filter配置”中,我们关注的重点是如何通过设置`data`和`type`属性来过滤Intent,以便指定的应用组件(如Activity)...

    intent-action-send.7z

    &lt;intent-filter&gt; &lt;action android:name="android.intent.action.SEND" /&gt; &lt;category android:name="android.intent.category.DEFAULT" /&gt; &lt;/intent-filter&gt; &lt;intent-filter&gt; &lt;action android:name="android....

    IntentIntent-Filter思维导图

    IntentIntent-Filter思维导图

    Intent-Demo-Eclispe.rar_DEMO

    Intent-Demo-Eclipse.rar_DEMO是一个专为Eclipse IDE设计的Intent演示应用,旨在帮助开发者理解和掌握Intent的使用方法。这个压缩包包含了两个示例项目:IntentDemo和IntentFilterDemo,分别展示了Intent的基本用法...

    Android开发教程之Intent详细讲解--千锋培训

    【Android开发教程之Intent详细讲解】 Intent在Android开发中扮演着至关重要的角色,它是四大组件(Activity、Service、BroadcastReceiver、ContentProvider)间通信的主要桥梁。Intent不仅描述了一个操作的动作,...

    android-intent-and-intent-action.zip_Android Intent_action

    android intent和intent action大全

    Activity_intent-filter

    当我们说到 "Activity_intent-filter" 时,我们实际上是在讨论如何通过设置 `intent-filter` 来使一个 `Activity` 对特定的 `Intent` 响应。 `Intent` 是Android中的一个消息传递对象,用于在组件之间传递请求或...

    智能家居系统 Intent与BroadcastReceiver-教案.doc

    【智能家居系统 Intent与BroadcastReceiver】是电子与通信工程学院智能家居系统课程中的一个重要教学章节,主要关注Android平台上关于Intent和BroadcastReceiver的使用。在智能家居系统中,这两个组件扮演着至关重要...

    Android Intent 、intent-filter详解

    参考...,讲解的很好 1.什么是Intent(定义) Intent这个单词的意思就是”意图,目的,意向”,Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。 个

    Activity&Intent的使用-移动平台开发技术-gddrxy

    Intent可以分成两种:显示Intent和隐式Intent。当知道要跳转过去的目标Activity的名字时可以采用显示Intent。而隐式Intent则是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮...

    Android Intent Filter用法

    通过在、、或标签内添加&lt;intent-filter&gt;子标签,我们可以为每个组件定义其能够接收的Intent类别。 1. **Action**: Action是Intent的一个属性,表示Intent要执行的动作,比如ACTION_VIEW、ACTION_SEND等。在...

    智能家居系统 Intent与Activity-教案.doc

    【智能家居系统 Intent与Activity 教案】 在计算机科学特别是Android应用开发中,Intent与Activity是构建用户界面和实现不同屏幕间交互的关键概念。本教案详细介绍了如何在智能家居系统的应用程序中运用Intent和...

    Android应用源码之7.Intent初级学习-IT计算机-毕业设计.zip

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它是一种意图声明,用于在组件之间传递消息和启动操作。在“Android应用源码之7.Intent初级学习”这个项目中,我们将深入理解Intent的基本概念、类型及其...

    android理论学习——基本概念

    本篇文章将深入探讨"android理论学习——基本概念"中的三个关键要素:Manifest、Content Providers以及Intent和Intent-filter。这些元素构成了Android应用程序的基础架构,使得开发者能够构建功能丰富的移动应用。 ...

    Android-Intent-数据存取-ContentProvider.doc

    "Android Intent 和 ContentProvider" Android Intent 是 Android 组件之间的信使,负责在 Android 三大核心组件(Activity、Service、Broadcast Receiver)之间传递信息。Intent 是一个将要执行的动作的抽象描述...

    android----intent

    在Android操作系统中,Intent是一种强大的组件间通信机制,它用于启动其他应用程序组件,如Activity、Service,甚至BroadcastReceiver。Intent不仅能够传递数据,还能在应用的不同部分之间建立连接,是Android开发中...

    intent匹配规则大总结

    `&lt;intent-filter&gt;`标签定义了一个或多个条件(如Action、Category和Data等),用于匹配Intent中的相应字段。当Intent中的字段与`&lt;intent-filter&gt;`中的条件完全匹配时,Activity才可被成功启动。 #### 二、Intent ...

Global site tag (gtag.js) - Google Analytics