`
119568242
  • 浏览: 426905 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

Android菜鸟日记3 intent

 
阅读更多
Android菜鸟日记3

intent
intent的概念:
intent是具有相关的数据负载的操作,intent 是你告诉android调用什么的一种操作。
个人理解:intent是用于在活动中调用其他活动的组件。在androidmainifest.xml中对活动注册好他的intent,然后就可以通过intent名来调用此方法。[个人认为intent就是方便活动调用其他活动的工具]

Intent实例:
[Android的NotePad例子的androidmainifest.xml片段]       
<activity android:name="NotesList" android:label="@string/title_notes_list">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                 //intent名
                <action android:name="android.intent.action.EDIT" />
//intent名
                <action android:name="android.intent.action.PICK" />
//intent名
                <category android:name="android.intent.category.DEFAULT" />
                //intent类别
                <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
               //intent MIME数据类型
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.GET_CONTENT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
            </intent-filter>
        </activity>



一、Intent注册
使用intent前需要在 androidmianifest.xml注册
Intent 注册是在活动注册内部的。
如上例。
注意:
Intent名称一般约定为<>.intent.action.活动名称。[action为活动集合[view之类的定义活动] 活动名称为继承activty的类名]
Android随带了一些预制程序。可以通过intent调用他们。

二、使用intent调用活动的方法
1. 显示操作启动。
描述:将需要调用的intent 名在实例化intent时传入。
Ex:Intent x = new Intent(“com.androidbook.intent.action.ShowBasicView”);

2. 使用一般操作加url 来启动。
描述:创建intent时只传入到 action类别的参数[“intent.ACTION_CALL”],然后靠传入uri去分辨具体活动。

Q:因为只传入到类别android如何知道调用此类别的哪个活动执行呢?
Answer:
Android通过URI的性质。查看此URI询问注册在当前action当前类别的活动哪个可以处理,然后调用它。为此在androidmianifest.xml 活动中注册intent时。需要注册此intent接受的URI协议。

EX:
            <intent-filter>
                <action android:name="android.intent.action.GET_CONTENT" />
                <data android:scheme="http” />
               //注册此intent接受的URI协议
            </intent-filter>



3. 使用组件直接调用活动
描述:实例化intent时用无参方法然后再对实例化对象设置活动的完整类名。
设置调用活动的方法:
Intent.setComponent(ComponentName name)
Intent.setClassName(String 包名,String 完整类名);
Intent.setClassName(Context context,String classNameInThatContext)
Setclass(Context context,Class classObjectInthatContext)

PS: ComponentName 是将包名和类名包装在一起的
New ComponentName(“com.android.contacts”,”com.android.contacts.xxxxx”);

Ex:使用组件直接调用活动
Intent xx= new intent();//先用无参构造方法。
xx. setComponent(New ComponentName(“com.android.contacts”,”com.android.contacts.xxxxx”))//然后设置调用的方法。
startActivity(xx);


三、使用extra信息
描述:通过extra可以向intent组将提供更多的信息。Extra以键值的形式表示。
键名称应该以包名称开头,值任意数据类型或者对象,只要他实现了android.os.Parcelable
Extra信息使用Android类android.os.bundle表示。
Intent取出extra
Intent.getExtras();//返回intent的extras 为bundle对象
Intent放入extra
Intent.putExtra(bundle xx);

Intent.putExtra(键,值);

注意:
Putextra传入数据不是传入引用,是复制进去。所以对传入后的数据修改是无法修改到出入extra内部的数据。

四、组件设计人员的最佳实践
Intent的设计模式:
Contacts.intent;
Contacts.intent.Insert;//内部类
Contacts.intent.UI;//内部类

顶级类 cantact.Intents定义了contacts应用程序将响应的主要intent,以及应用程序在运行过程发生的事件。[定义一些字符串 内容是contacts应用程序需要调用的intents名称]
Ex:
public final class Contacts$Intents
{
……
  public static final String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
……
  public Contacts$Intents()
  {
    throw new RuntimeException("Stub!");
  }
}


嵌套类 Contacts.intent.Insert定义了支持的intent和其他常量的插入操作。[也是定义一些字符串 内容为需要调用的intent名称]
public final class Contacts$Intents$Insert
{
  public static final String ACTION = "android.intent.action.INSERT";
  public static final String FULL_MODE = "full_mode";
  public static final String NAME = "name";
  public static final String PHONETIC_NAME = "phonetic_name";
  public static final String COMPANY = "company";
  public static final String JOB_TITLE = "job_title";
  public static final String NOTES = "notes";
  public static final String PHONE = "phone";
  public static final String PHONE_TYPE = "phone_type";
  public static final String PHONE_ISPRIMARY = "phone_isprimary";
  public static final String SECONDARY_PHONE = "secondary_phone";
  public static final String SECONDARY_PHONE_TYPE = "secondary_phone_type";
  public static final String TERTIARY_PHONE = "tertiary_phone";
  public static final String TERTIARY_PHONE_TYPE = "tertiary_phone_type";
  public static final String EMAIL = "email";
  public static final String EMAIL_TYPE = "email_type";
  public static final String EMAIL_ISPRIMARY = "email_isprimary";
  public static final String SECONDARY_EMAIL = "secondary_email";
  public static final String SECONDARY_EMAIL_TYPE = "secondary_email_type";
  public static final String TERTIARY_EMAIL = "tertiary_email";
  public static final String TERTIARY_EMAIL_TYPE = "tertiary_email_type";
  public static final String POSTAL = "postal";
  public static final String POSTAL_TYPE = "postal_type";
  public static final String POSTAL_ISPRIMARY = "postal_isprimary";
  public static final String IM_HANDLE = "im_handle";
  public static final String IM_PROTOCOL = "im_protocol";
  public static final String IM_ISPRIMARY = "im_isprimary";

  public Contacts$Intents$Insert()
  {
    throw new RuntimeException("Stub!");
  }
}

嵌套类 : Contacts.intent.UI 定义一些调用UI的方式。还包含了他们所需要的extra信息。
[也就是说定义的字符串 内容是一些调用ui的intent和这些intent需要用到得extra的键名(简单的说就是字符串存UI intent和这些UI intent需要用到的extra键名,这样用到intent时同时可以去除extra内容给intent用)]
package android.provider;

@Deprecated
public final class Contacts$Intents$UI
{
  public static final String LIST_DEFAULT = "com.android.contacts.action.LIST_DEFAULT";
  public static final String LIST_GROUP_ACTION = "com.android.contacts.action.LIST_GROUP";
  public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
  public static final String LIST_ALL_CONTACTS_ACTION = "com.android.contacts.action.LIST_ALL_CONTACTS";
  public static final String LIST_CONTACTS_WITH_PHONES_ACTION = "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
  public static final String LIST_STARRED_ACTION = "com.android.contacts.action.LIST_STARRED";
  public static final String LIST_FREQUENT_ACTION = "com.android.contacts.action.LIST_FREQUENT";
  public static final String LIST_STREQUENT_ACTION = "com.android.contacts.action.LIST_STREQUENT";
  public static final String TITLE_EXTRA_KEY = "com.android.contacts.extra.TITLE_EXTRA";
  public static final String FILTER_CONTACTS_ACTION = "com.android.contacts.action.FILTER_CONTACTS";
  public static final String FILTER_TEXT_EXTRA_KEY = "com.android.contacts.extra.FILTER_TEXT";

  public Contacts$Intents$UI()
  {
    throw new RuntimeException("Stub!");
  }
}

在设计ContentProvider和对它们进行操作的活动时,用到此模式,在接口或类中定义intent常量使intent明确.[也就是说在资源包装器中设置好资源包装器需要调用的intent]

五、intent类别
描述:在注册时可以设置intent类别
            <intent-filter>
                <action android:name="android.intent.action.GET_CONTENT" />
                <data android:scheme="http” />
               //注册此intent接受的URI协议
<category android:name="类别" />
//注册此intent类别
            </intent-filter>


通过PacKageManager对象可以获得与某intent匹配的活动。
Intent mainIntent = new Intent(intent.xx,null);// intent.xx活动集合
mainIntent.addCategory(intent.类别c);//定义类别
PacKageManager pm = getPackageManager();
List<ResolverInfo> list=pm.queryIntentActivities(mainIntent,0);

上面代码可以获得所有在xx活动种类下的intent且类别是类别C的intent集合list.

即在定义的intent的活动集合下寻找类别是x[自己定义的]intent

六、intent解析组件规则
名称->特性->数据->类别;
如果名称只对应一个组件则执行,否则进入特性。
如果特性下只有一个组件则执行,如果有多个则提供活动选择器。
如果没有特写设置,则进入数据,根据uri查看数据选择可以执行此uri的组件。
如果没有设置特性,和数据则进入类别,android挑选与类别匹配的活动。

七、startActivity()与starActivityForResult()
前者无返回,后者有返回
starActivityForResult(intent x,int requestCode);
使用starActivityForResult是会调用onActivityResult(3参数)方法

八、GET_CONTENT操作
通过设置传入的intent的MIME类别来获得一个特定的MIME类型项。
在注册时需要对intent设置它能具有的MIME类别。
            <intent-filter android:label="@string/resolve_edit">
                <action android:name="android.intent.action.VIEW" />
                <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
                 //MIME类别
            </intent-filter>









2011-7-1
poolo
分享到:
评论

相关推荐

    Android应用源码之Intent_Intent.zip

    3. **Intent的主要属性** - **Action**:Intent的动作标识,如`ACTION_VIEW`, `ACTION_CALL`等,用于描述Intent要执行的操作。 - **Data**:Intent的数据URI,用于携带数据,可以是文件路径、网络URL等。 - **...

    Android的Intent实验

    3. **Intent的分类** - 显式Intent: 直接指定目标组件,适用于在同一应用内的组件间通信。 - 隐式Intent: 不指定目标组件,而是通过动作和数据来寻找能处理该Intent的组件。这种方式可以跨应用通信,增加了系统的...

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

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

    Android 官方SDK文档 Intent

    3. **Category**:提供额外的信息,帮助系统确定哪些组件可以处理此Intent。例如,`CATEGORY_LAUNCHER`表示该组件可以在主屏幕启动器中显示。 4. **Extra**:附加数据,可以是键值对的形式,用于传递更具体的信息。...

    android Intent例子源码

    android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码

    android各种文件的intent

    根据提供的文件信息,我们可以深入探讨如何在Android应用中创建不同类型的文件Intent,以便与其他应用程序共享或打开特定格式的文件。 ### 一、Android中的Intent机制简介 在Android开发中,`Intent`是一种消息...

    android用于打开各种文件的intent.pdf

    Android 中使用 Intent 打开各种文件类型 Android 操作系统提供了 Intent 机制,允许应用程序之间进行交互和通信。Intent 是一个异步的消息机制,用于在应用程序之间请求或提供服务。通过使用 Intent,可以实现打开...

    Android应用源码之Intent1_Intent.zip

    3. **Intent的创建** 创建Intent通常有两种方式: - `new Intent(Context context, Class&lt;?&gt; clazz)`:用于创建显式Intent,传入上下文和目标Activity或Service的Class对象。 - `new Intent()`:用于创建隐式...

    Android利用Intent启动和关闭Activity

    【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...

    android整合--intent

    在Android开发中,Intent是一种非常重要的组件间通信(IPC)机制。Intent主要用于启动或与其它应用程序组件进行交互,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及内容提供者...

    Android应用源码之Intent.zip

    3. **Intent的主要属性**: - `Action`:字符串类型,表示要执行的操作,如`ACTION_VIEW`,`ACTION_CALL`等。 - `Data`:Uri对象,表示要操作的数据,可以是文件路径、网页URL等。 - `Type`:MIME类型,用于描述...

    android----intent

    3. Example-3.1 - 这可能是示例代码或案例研究,展示了如何在实际开发中使用Intent。可能包括创建显式和隐式Intent的实例,以及如何处理Intent传递的数据。 总的来说,理解并熟练使用Android的Intent系统对于开发...

    android各组件详解- Intent.

    标题与描述均指向了“Android各组件详解——Intent”,这一主题深入探讨了Android开发中至关重要的Intent组件。本文将从多个角度解析Intent的功能、应用场景及其内部结构,为开发者提供全面的理解。 ### Intent概述...

    安卓Android源码——Intent.rar

    3. **Intent解析过程**: 当系统接收到一个隐式Intent时,会遍历Manifest.xml文件中所有声明的Intent Filter,找到匹配Action、Data和Category的组件。匹配成功后,该组件就会被调用执行相应操作。 4. **启动...

    Android学习总结-Intent详解.doc

    3. **Intent Filter匹配过程** 当使用隐式Intent时,系统会遍历所有注册了Intent Filter的组件,通过匹配action、category、data等属性来找到最合适的响应者。组件的AndroidManifest.xml中定义的Intent Filter包含...

    android.intent.action.TIME_TICK

    3. 注册IntentFilter:为IntentFilter添加对应的ACTION,如"android.intent.action.TIME_TICK"、"android.intent.action.SCREEN_ON"和"android.intent.action.BATTERY_CHANGED"。 4. 不再需要时,记得在合适的位置...

    Android 常用的Intent的URI及示例

    Android Intent 的 URI 及示例 Android 操作系统中,Intent 是一个非常重要的组件,它允许不同的应用程序之间进行通信和交互。在 Android 中,Intent 是一个消息对象,它可以用来请求其他应用程序执行某些操作。...

    Android源码——Intent切换.zip

    3. **Intent解析与匹配**: - 系统通过`PackageManager`服务和`IntentFilter`来解析和匹配Intent。IntentFilter是组件(如Activity)声明它可以处理的Intent类型。 - 当发送隐式Intent时,系统会遍历所有注册的...

    Android Intent传递数据大小限制详解

    在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能...

    Android中intent的使用

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他组件或传递数据。本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图...

Global site tag (gtag.js) - Google Analytics