Android开发中Intent用法总结

本文实例讲述了Android开发中Intent用法。分享给大家供大家参考,具体如下:

Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一个标志性的对象。

当一个Activity要启动另外一个Activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动。这种方式简洁、明了,但是却违背了Android开发的理念。Android使用Intent来"封装"程序的"调用意图",不管程序想启动什么组件,启动一个Activity也好,一个service也好,或者一个Broadcast Receiver也好,Android统一使用Intent对象来封装这种"启动意图"。

除此之外,使用Intent也有好处,某些时候,应用程序只是想启动具有某些特征的组件或者应用程序,却并不想和这类程序有硬性的代码耦合;另外,应用程序有时候或许只是知道要启动的东西的一些特征,并不知道要启动的程序具体指的是什么(比如,某程序想启动发短信的应用程序,而此时系统中存在多个发信息的软件,我们无法知道要打开什么软件),此时程序要做的就应该是发送一个启动短信应用程序的意图,而不是指定要打开什么软件。当然更一般的,Intent也可以指定打开那个应用程序,而与一些程序有硬性的耦合关系。

Intent还是应用程序组件之间通信的重要媒介,两个Activity把需要交换的数据封装成Bundle对象,然后使用Intent来携带Bundle对象,这样就实现了两个Activity之间的数据交换。

Intent存在以下几个属性:Component,Action,Category,Data,Type,Extra,Flag七个属性,其中Component属性用来指定需要启动的目标组件,Extra属性用于携带需要交换的数据。

下面对Intent对象做详细的介绍:

1. Intent的Component属性

Component是用来指定启动目标组件的属性,标准的启动代码如下:

ComponentName comp = new ComponentName(firstActivity.this,secondActivity.class);
Intent intent = new Intent();
Intent. setComponent(comp);
startActivity(intent);

以上代码用来标准的创建ComponentName对象,进而调用Intent对象的setComponent()函数来为Intent设定相应的componentName,最后调用startAcitvity函数启动一个新的Activity。

实际上,当需要为Intent设定Component属性的时候,Intent已经为我们提供了一个简单的构造器,使用方法如下(我们经常使用的方式):

代码如下:

Intent intent = new Intent(firstActivity.this,senondActivity.class);

值得一提的是,在secondActivity组件中,可以使用getIntent()方法取得调用次组件的Intent对象,进而,getXXX方法在这里就可以各种使用了。

2. Intent 的Action与Category属性

Action和Category属性都是普通的字符串,其中Action代表了抽象出来的"动作",Category属性用来和Action属性配合使用,表达出要启动某组件的意图。

具有<intent-filter…/>标签的Activity均有可能会被启动。

比如:

Public final staticString SOME_ACTION = "org.someaction.SOME_ACTION"
// 这是一个字符转,随便设定,但是一般都具有一些抽象的语义。
在这个Activity种的某个按钮的onClick()方法中加入:
Intent intent = newIntent();
Intent.setAction(thisActivity.SOME_ACTION);
startActivity(intent);

这样的代码并没有具体指出要启动哪个Activity,这样就脱离了"硬编码",但是具体要启动哪个Activity呢,这将取决于Activity配置文件中的<intent-filter…/>标签。

<intent-filter…/>是AndroidManifest.xml文件中<activity…/>元素的子元素,需要做的,就是给你实际需要相应这个意图的Activity添加<intent-filter…/>标签,在<intent-filter…/>下,存在着三种标签:1.<action…/>2.<category…/>3.<data…/>,其中指定android:name属性之后,这个activity便具有了相应上面意图的属性了。

对于上面的意图,则添加这样的代码(当然要在<intent-filter…/>标签下):

代码如下:

<action android:name = "org.someaction.SOME_ACTION"/>

需要一提的是:一个Intent对象最多只能包含一个Activity属性,程序调用setAction(Stringstr)来设定Action的属性值;而一个Activity可以有多个Category属性,程序可以调用addCategory(String str)来添加Category属性。当程序创建Intent的时候,创建的Intent属性自动启动属性值为Intent.CATEGORY_DEFAULT常量,其值为"android.intent.category.DEFAULT",所以,在配置某个Activity属性的时候<categoryandroid:name = "andrid.intent.category.DEFAULT ">是可以添加到配置文件当中的。

实际上Android内部提供了大量的标准的Action和Category常量。

总结如下:


Action常量


对应的android:name 设定


简单说明


ACTION_MAIN


Android.intent.action.MAIN


应用程序入口


ACTION_VIEW


Android.intent.action.VIEW


显示指定数据


ACTION_ATTACH_DATA


Android.intent.action.ATTACH_DATA


指定某模块数据被附加的地方


ACTION_EDIT


Android.intent.action.EDIT


编辑指定数据


ACTION_PICK


Android.intent.action.PICK


从列表中选择某项并返回所选数据


ACTION_CHOOSER


Android.intent.action.CHOOSER


显示一个Activity选择器


ACTION_GET_CONTENT


Android.intent.action.GET_CONTENT


让用户选择数据,并返回所选


ACTION_DIAL


Android.intent.action.DIAL


显示拨号面板


ACTION_SEND


Android.intent.action.SEND


直接发送数据


ACTION_SENDTO


Android.intent.action.SENDTO


直接发送消息


ACTION_ANSWER


Android.intent.action.ANSWER


应答电话


ACTION_INSERT


Android.intent.action.INSERT


插入数据


ACTION_DELETE


Android.intent.action.DELETE


删除数据


ACTION_RUN


Android.intent.action.RUN


运行数据


ACTION_SYNC


Android.intent.action.SYNC


执行数据同步


ACTION_PICK_ACTIVITY


Android.intent.action.PICK_ACTIVITY


用于选择activity


ACTION_SEARCH


Android.intent.action.SEARCH


执行搜索


ACTION_WEB_SEARCH


Android.intent.action. WEB_SEARCH


直径web搜索


ACTION_ FACTORY_TEST


Android.intent.action.FACTORY_TEST


工厂测试入口点

这里仅仅摘录一些,如果想了解全部的ACTION,可以直接查看Android的标准API中有关Intent的说明部分。

3. Intent中的Data和Type属性

采用几个例子来说明Data的用法:

在一个button的OnClick()方法中添加下面代码:

String data = http://3g.renren.com;
Uri uri =Uri.parse(data);
Intent.setAction(Intent.ACTION_VIEW);
Intent.setData(uri);
startActivity(intent);

此方法中将会使得按钮启动人人网。

当然一下代码是简便的写法:

Uri myUri = Uri.parse("http://3g.renren.com");
Intent intent = new Intent(Intent.ACTION_VIEW,myUri);
startActivity(intent);

上面的为其更详细的设定方法。

4. Intent的Extra属性

Intent属性通常用来用于在多个Activity之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,他可以输入多个key-value对,这样就可以通过Intent在不同的Activity之间进行相应的数据交换了。

Intent提供的方法有如下几个:

putExtra(Bundledata)   getExtras()
putXXX(Stringkey XXX data)   getXXX(String key)
putSerializable(Stringkey, Serializable data) 对应的有
getSerializable(Stringkey, Serializable data)

在课件中已经给出了添加键值对的相关代码,这里就不在重复了。

总结:

Android应用总是要借助Intent来实现需要启动的某个组件,Intent就是这种"启动意图"的封装形式,这种意图并没有和任何程序组件耦合,通过这种方式即可以很好的提供了程序的可扩展性和可维护性,其中<intent-filter/>的配置是程序组件最为重要的标签,最好借助Eclipse进行相应标签的添加,因为一些空格之类的小错误常常导致一些异常,希望各位童鞋在使用时引起重视。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android实现打开各种文件的intent方法小结

    本文实例讲述了Android实现打开各种文件的intent方法.分享给大家供大家参考,具体如下: import android.app.Activity; import Android.content.Intent; import android.net.Uri; import android.net.Uri.Builder; import Java.io.File; import android.content.Intent; //自定义android Intent类, //可用于获取打开以下

  • Android常用的intent action汇总

    本文总结讲述了Android常用的intent action功能.分享给大家供大家参考,具体如下: Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件.Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.处理接收短信,诸如此

  • Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码

    Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码 功能 创建5个按钮,隐式启动.发短信.拨号按钮.电话按钮.打开网页按钮.通过使用Intent来完成各自按钮下的功能 代码目录如下 详细代码如下: activity_main.xml代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

  • Android编程使用Intent传递图片的方法详解

    本文实例讲述了Android编程使用Intent传递图片的方法.分享给大家供大家参考,具体如下: 基本思路是先把bitmap转化为byte数组,用Intent传递数组,在将数组转化为bitmap bitmap转化为byte数组的方法: private byte[] Bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.

  • Android 标准Intent的使用详解

    一 Android系统用于Activity的标准Intent 1 根据联系人ID显示联系人信息 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); //显示联系人信息 intent.setData(Uri.parse("content://contacts/people/492")); startActivity(intent); 2 根据联系人ID显示拨号面板 Intent intent = new

  • Android中Intent传递对象的3种方式详解

    前言 相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输,下面就来介绍三种解决方式. 一.Serializable 方式 这是最简单的一种方法,因为我们要做的就是让我们自定义的对象实现 Serializable 这个空接口. public class Person implements Se

  • Android基于Intent实现Activity之间数据传递的方法

    本文实例讲述了Android基于Intent实现Activity之间数据传递的方法.分享给大家供大家参考,具体如下: MainActivity: package com.test.intentdemo; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import andro

  • Android 通过Intent使用Bundle传递对象详细介绍

    Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable. 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializa

  • Android开发中Intent用法总结

    本文实例讲述了Android开发中Intent用法.分享给大家供大家参考,具体如下: Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一个标志性的对象. 当一个Activity要启动另外一个Activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动.这种方式简洁.明了,但是却违背了Android开发的理念.Andro

  • Android开发中Intent传递对象的方法分析

    本文实例分析了Android开发中Intent传递对象的方法.分享给大家供大家参考,具体如下: 方法一: 利用方法:public Intent putExtra (String name, Parcelable value)传递一个Parceable的参数,此方法的参数被序列化到内存. 利用方法:public Intent putExtra (String name, Serializable value)传递一个实现了序列化接口类的对象,此方法的实参被序列化到磁盘. 方法二: 把数据存放到应用

  • Android开发中GridView用法示例

    本文实例讲述了Android开发中GridView用法.分享给大家供大家参考,具体如下: Android的GridView控件用于把一系列的空间组织成一个二维的网格显示出来,应用的比较多的就是组合图片显示.下面我就详细讲一个例子. 首先写一个类继承BaseAdapter 1. Java代码 package com.yarin.android.Examples_04_19; import android.content.Context; import android.view.View; impo

  • Android开发中LayoutInflater用法详解

    本文实例讲述了Android开发中LayoutInflater用法.分享给大家供大家参考,具体如下: 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化:而findViewById()是找xml布局文件下的具体widget控件(如Button.TextView等). 具体作用: 1.对于一个没有被载入或者想要动态载入的界面,都需要使用Layout

  • Android开发中PopupWindow用法实例分析

    本文实例分析了Android开发中PopupWindow用法.分享给大家供大家参考,具体如下: private TextView tv_appmanager_title; private ListView lv_app_manager; private LinearLayout ll_appmanager_loading; private AppManagerProvider provider; private List<AppManagerInfo> infos ; private AppM

  • Android开发中Intent.Action各种常见的作用汇总

    本文介绍Android中Intent的各种常见作用. 1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始.比较常用. Input:nothing Output:nothing <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <a

  • Android开发中方向传感器定义与用法详解【附指南针实现方法】

    本文实例讲述了Android开发中方向传感器定义与用法.分享给大家供大家参考,具体如下: Android中的方向传感器在生活中是一个很好的应用,典型的例子是指南针的使用,我们先来简单介绍一下传感器中三个参数x,y,z的含义,以一幅图来说明. 补充说明:图中的坐标轴x,y,z和传感器中的X,Y,Z没有任何联系! 如上图所示,绿色部分表示一个手机,带有小圈那一头是手机头部 传感器中的X:如上图所示,规定X正半轴为北,手机头部指向OF方向,此时X的值为0,如果手机头部指向OG方向,此时X值为90,指向

  • Android开发中使用Intent打开第三方应用及验证可用性的方法详解

    本文实例讲述了Android开发中使用Intent打开第三方应用及验证可用性的方法.分享给大家供大家参考,具体如下: Android中提供了Intent机制来协助应用间的交互与通讯.可作为不同组件之间通讯的媒介完成应用之间的交互.这里讨论一下针对Intent打开第三方应用的相关操作. 本文主要记录: ① 使用 Intent 打开第三方应用或指定 Activity 的三种方式 ② 使用上面三种方式时分别如何判断该 Intent 能否被解析 ③ 判断该 Intent 能否被解析中可能出现的遗漏 基础

  • Android开发中的数据库事务用法分析

    本文实例讲述了Android开发中的数据库事务用法.分享给大家供大家参考,具体如下: 在android应用程序开发中,在使用到数据库的时候,事务处理是非常重要的. 首先Android数据库操作(特别是写操作)是非常慢的,将所有操作打包成一个事务能大大提高处理速度. 其次是保证数据的一致性,让一个事务中的所有操作都成功执行,或者失败,或者所有操作回滚. 如果您喜欢使用其他平台(如PHP + MySQL),代码通常在一个功能强大的服务器上运行,一般不会被意外中止,但在android平台上,您将会因为

  • Android开发中ProgressDialog简单用法示例

    本文实例讲述了Android开发中ProgressDialog简单用法.分享给大家供大家参考,具体如下: 网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主要的Activity ProgressBarDemo.java package com.lveyo.android.demo.progressbar; import android.app.Ac

随机推荐