Android开发中Intent用法总结

 更新时间:2016年10月21日 11:08:15   作者:pku_android  
这篇文章主要介绍了Android开发中Intent用法,总结分析了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程序设计有所帮助。

相关文章

  • Android绘制音乐播放器示波器

    Android绘制音乐播放器示波器

    这篇文章主要为大家详细介绍了Android绘制音乐播放器示波器的相关资料,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 如何从外部浏览开启Android App

    如何从外部浏览开启Android App

    从浏览器中点击某个按钮,如果手机上装有相应的app,则直接开启app,并且到相对的页面。如果没有装该app,则会到相应的下载app的界面。这样的功能怎么实现呢,本文带着大家来看看如何实现。
    2021-06-06
  • Android编程实现将tab选项卡放在屏幕底部的方法

    Android编程实现将tab选项卡放在屏幕底部的方法

    这篇文章主要介绍了Android编程实现将tab选项卡放在屏幕底部的方法,涉及Android界面布局、tab设置及权限控制相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • android 上传aar到私有maven服务器的示例

    android 上传aar到私有maven服务器的示例

    这篇文章主要介绍了android 上传aar到私有maven服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Android中的图片优化完全指南

    Android中的图片优化完全指南

    这篇文章主要给大家介绍了关于Android中图片优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Android Studio中使用jni进行opencv开发的环境配置方法

    Android Studio中使用jni进行opencv开发的环境配置方法

    今天小编就为大家分享一篇Android Studio中使用jni进行opencv开发的环境配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Flutter 给列表增加下拉刷新和上滑加载更多功能

    Flutter 给列表增加下拉刷新和上滑加载更多功能

    在实际的 App 中,下拉刷新和上滑加载更多是非常常见的交互形式。在 Flutter 中,有 flutter_easyrefresh开源插件用于实现下拉刷新和上滑加载更多。本篇介绍了有状态组件和 flutter_easyrefresh 的基本应用,同时使用模拟的方式完成了异步数据加载。
    2021-05-05
  • Android APP编写简单答题器

    Android APP编写简单答题器

    这篇文章主要为大家详细介绍了Android APP编写简单答题器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • android studio组件通信:Intend启动Activity接收返回结果

    android studio组件通信:Intend启动Activity接收返回结果

    这篇文章主要介绍了android studio组件通信:Intend启动Activity接收返回结果,设计一个主Activity和一个子Activity(Sub-Activity),使用主Activity上的按钮启动子Activity,并将子Activity的一些信息返回给主Activity,并显示在主Activity上,需要的朋友可以参考一下
    2021-12-12
  • 详解Android单元测试方法与步骤

    详解Android单元测试方法与步骤

    这篇文章给大家分享了Android单元测试方法与步骤的相关知识点,有兴趣和需要的朋友参考学习下。
    2018-07-07

最新评论