Android学习笔记——Intents 和 Intent Filters(一)

  本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论。

      欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3991792.html

  • 知识点:Intents 和 Intent Filters的定义和作用以及用法。

   

  •  Intent
     Intent这个单词的意思是“意图”,正如它的意思,它在Android中就是表达了实现某项功能的意图(intention to do an  action)。

         定义

                Intent是传送消息的对象(messaging object),传送的是要求其他应用组件某些功能的消息。Intent的作用范围可以是

         同一Android应用内,也可以是不同应用间。例如我们经常使用的微信扫一扫功能就开启了系统拍摄照片的Activity。

                                                                  

              Intent是 android.content.Intent类型的对象,它可以通过Bundle携带数据。

           用途

                 1.开启activity (start an activity)     

                    

1  //启动方法:
2
3             startActivity(Intent intent)
4
5             startActivityForResult(Intent intent)

 

                 2.开启service(start a service)

               

1 // 启动方法:
2
3                startService(Intent service)
4                bindService (Intent service, ServiceConnection conn, int flags)

 

                 3.释放broadcast(deliver a broadcast)

            

//启动方法
          sendBroadcast(Intent intent)
          sendBroadcast(Intent intent, String receiverPermission)

          sendOrderedBroadcast(Intent intent, String receiverPermission)
          sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

          sendStickyBroadcast(Intent intent)
          sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

      

        类型

            Intent分为两种类型:显示Intent(Explicit intents )和隐式Intent(Implicit intents)

            显示Intent:

                    指定通过名字(完全限定类名the fully-qualified class name)启动组件。一般在我们自己的app中使用明确的Intent来启动组件,因为我们知道自己的app中activity或service的类名。

           举个例子:

               作为对用户操作的反馈,开启一个新的activity或是开启了后台下载文件的service。

           隐式Intent:

                   没有要求具体的组件的类名字,取而代之的是声明了一个一般功能的Intent,其他应用的组件会处理。

 

 

              当我们创建一个显示Intent来开启一个activity或service时,系统会马上开启在Intent对象中详细说明的应用组件。

           

1 //显式Intent
2 Intent i=new Intent(MainActivity.this,SecondActivity.class);
3 startActivity(i); 

 

           当我们创建一个隐式Intent时,Android系统会通过intent的内容和在设备上其他app的声明在manifest file文件里的intent 过滤器(filters)比较,以寻找适当的组件来开启。如果intent匹配(match)intent filter,系统开启那个组件,传递intent对象。如果多个intent filters都匹配,系统会展示一个对话框让用户选择一个app使用。

     

//隐式Intent
Intent intent = new Intent();
intent.setAction("android.intent.action.DIAL");
//确保Intent会解决为Activity
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}

 

1 <!--Manifest文件中声明的intent filter-->
2 <activity
3            android:name="SecondActivity">
4             <intent-filter >
5                 <action android:name="android.intent.action.DIAL"/>
6                 <category android:name="android.intent.category.DEFAULT"/>
7             </intent-filter>
8   </activity>

 

 

                          

        

          1.Activity A创建了一个描述了功能的Intent,传递给了startActivity()

          2.Android系统在所有app的intent过滤器(intent filter)中寻找符合之前的intent的。

          3.当找到符合的时,系统开启符合的Activity(Activity B)通过调用它的onCreate()方法,传递Intent给它。

      

         

 

           如何更好的理解这两种Intent呢?

           《疯狂Android讲义》上有个例子可以帮助我们理解什么是显式Intent和隐式Intent,打个比方。就好比一个女生有找男朋友的意图,有两种方式表达她的意图。

            第一种,她明确指出,要找“吴彦祖”做男朋友,这种明确指定要找某人的方式就好比显式Intent。

            第二种,她指出要找高、富、帅做男朋友,至于到底是谁不重要,只要符合这三个条件即可,这种方式就好比隐式Intent。

        

 

              To be Continued.........

原文地址:http://www.cnblogs.com/JohnTsai/p/3991792.html

时间: 2024-11-02 07:04:51

Android学习笔记——Intents 和 Intent Filters(一)的相关文章

Android学习笔记——Intents 和 Intent Filters(二)

 本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论.       欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3993488.html 知识点:            继续昨天的Intents 和 Intent Filters的学习        组成一个Intent(Building an Intent):           Intent 对象携带信息(例如明确的组件名或应该接收intent的组件种类(intent ca

Android开发之旅: Intents和Intent Filters(理论部分)

引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离, 并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义!Android应用程序也是一个沙盒,但是他们能够使用Intent. Broadcast Receivers.Adapters.Content Providers.Internet去突破他们的边界互相交流.有交流还会和谐,由此可见这些交流手段有多重要. 上篇文章中我们在 SMS接收程序和使用Int

Android开发之旅: Intents和Intent Filters(实例部分)

引言 上篇我们介绍了Intents和Intent Filters的理论部分,主要是介绍了:activities.services.broadcast receivers三种组件的Intent机制两种Intent(显式和隐式)及它们如何去匹配目的组件.Intent对象包含哪些信息.Intent Filters的action & category & data. Intent的重要性,我不再着重介绍了,但我还是要说:Intent能够使应用程序突破沙盒与外界交流,者这使得Android的世界变得

Android学习笔记(二)App工程文件分析_Android

App工程文件分析 关于如何创建一个最简单的Android App请参照链接: < Android学习笔记(一)环境安装及第一个hello world > http://www.jb51.net/article/52593.htm 创建完的工程文件如下图所示,本文对一些主要的文件进行分析. src文件分析 App源文件如图: 打开源文件 MainActivity.java 可看到如下代码: 源码主要功能如下: App源文件目录 package com.example.firstapp; 导入A

Android学习笔记之应用单元测试实例分析_Android

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

Android学习笔记之应用单元测试实例分析

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

Android学习笔记45之gson解析json_Android

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Android学习笔记45之gson解析json

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Android简明开发教程七:Intents和Intent Filters

Android应用中的三个核心组件:Activities,Services和broadcast receivers都是通过称为"Intent"的消息来激活的. Android应用一个特点是"低耦合",各个Activities,Services和broadcast receivers相当独立,可以看成是一个个"迷你应 用",而Intent是这些"迷你应用"的粘合剂,Intent不但可以用于同一个Application之间Acti