热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android第四节课之Intent

一.Intent的介绍Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Inte


一.Intent的介绍

Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

二.Inten启动组件的方法

Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。具体方法如下:

组件名称

方法名称

 

Activity

startActvity( )

startActivity( )

 

Service

startService( )

bindService( )

 

Broadcasts

sendBroadcasts( )

sendOrderedBroadcasts( )

sendStickyBroadcasts( )

三.Intent的属性

Intent有以下几个属性:

动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。

1.Intent的Action属性

Action是指Intent要完成的动作,是一个字符串常量。SDK中定义了一些标准的Action常量如下表所示。

Constant

Target component

Action

ACTION_CALL

activity

Initiate a phone call.

ACTION_EDIT

activity

Display data for the user to edit.

ACTION_MAIN

activity

Start up as the initial activity of a task, with no data input and no returned output.

ACTION_SYNC

activity

Synchronize data on a server with data on the mobile device.

ACTION_BATTERY_LOW

broadcast receiver

A warning that the battery is low.

ACTION_HEADSET_PLUG

broadcast receiver

A headset has been plugged into the device, or unplugged from it.

ACTION_SCREEN_ON

broadcast receiver

The screen has been turned on.

ACTION_TIMEZONE_CHANGED

broadcast receiver

The setting for the time zone has changed.

 下面是一个测试Action常量的例子:

main.xml

  1. xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" 
  3.     android:orientation&#61;"vertical" 
  4.     android:layout_width&#61;"fill_parent" 
  5.     android:layout_height&#61;"fill_parent" 
  6.     > 
  7.     <TextView    
  8.         android:layout_width&#61;"fill_parent"   
  9.         android:layout_height&#61;"wrap_content"   
  10.         android:text&#61;"&#64;string/hello" 
  11.         /> 
  12.     <Button   
  13.         android:text&#61;"测试Action属性" 
  14.         android:id&#61;"&#64;&#43;id/getBtn" 
  15.         android:layout_width&#61;"wrap_content"   
  16.         android:layout_height&#61;"wrap_content"   
  17.         /> 
  18. LinearLayout> 

 strings.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <resources> 
  3.     <string name&#61;"hello">测试Action属性string> 
  4.     <string name&#61;"app_name">IntentActionDemostring> 
  5. resources> 

MainActivity.java

  1. package com.android.action.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.  
  10. public class MainActivity extends Activity {  
  11.     private Button getBtn;  
  12.     &#64;Override 
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);  
  16.           
  17.         getBtn&#61;(Button)findViewById(R.id.getBtn);  
  18.         getBtn.setOnClickListener(new OnClickListener() {  
  19.             &#64;Override 
  20.             public void onClick(View v) {     
  21.                 Intent intent &#61; new Intent();                 
  22.                 intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性                  
  23.                 intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性   
  24.                                                                 //主要是获取通讯录的内容  
  25.                 startActivity(intent); // 启动Activity  
  26.             }  
  27.         });          
  28.     }  

效果图&#xff1a;

2.Intent的Data属性

Intent的Data属性是执行动作的URI和MIME类型&#xff0c;不同的Action有不同的Data数据指定。比如&#xff1a;ACTION_EDIT Action应该和要编辑的文档URI Data匹配&#xff0c;ACTION_VIEW应用应该和要显示的URI匹配。

3.Intent的Category属性

Intent中的Category属性是一个执行动作Action的附加信息。比如&#xff1a;CATEGORY_HOME则表示放回到Home界面&#xff0c;ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息。

Constant

Meaning

CATEGORY_BROWSABLE

The target activity can be safely invoked by the browser to display data referenced by a link — for example, an image or an e-mail message.

CATEGORY_GADGET

The activity can be embedded inside of another activity that hosts gadgets.

CATEGORY_HOME

The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.

CATEGORY_LAUNCHER

The activity can be the initial activity of a task and is listed in the top-level application launcher.

CATEGORY_PREFERENCE

The target activity is a preference panel.

 下面是一个回到Home界面的例子&#xff1a;

main.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" 
  3.     android:orientation&#61;"vertical" android:layout_width&#61;"fill_parent" 
  4.     android:layout_height&#61;"fill_parent" 
  5.     >     
  6.     <TextView   
  7.     android:layout_width&#61;"fill_parent" 
  8.     android:layout_height&#61;"wrap_content"   
  9.     android:text&#61;"测试Intent Category"   
  10.     /> 
  11.     <Button   
  12.     android:id&#61;"&#64;&#43;id/Button1"   
  13.     android:layout_width&#61;"wrap_content" 
  14.     android:layout_height&#61;"wrap_content"   
  15.     android:text&#61;"转到Home界面" 
  16.     />    
  17. LinearLayout> 

strings.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <resources> 
  3.     <string name&#61;"hello">Hello World, MainActivity!string> 
  4.     <string name&#61;"app_name">IntentCategoryDemostring> 
  5. resources> 

MainActivity.java

  1. package com.android.category.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.  
  10. public class MainActivity extends Activity {  
  11.     private Button btn;  
  12.     &#64;Override 
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);  
  16.           
  17.         btn &#61; (Button)findViewById(R.id.Button1);  
  18.         btn.setOnClickListener(new OnClickListener() {  
  19.             &#64;Override 
  20.             public void onClick(View v) {     
  21.                 Intent intent &#61; new Intent();                 
  22.                 intent.setAction(Intent.ACTION_MAIN);// 添加Action属性                
  23.                 intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性              
  24.                 startActivity(intent);// 启动Activity  
  25.             }  
  26.         });  
  27.     }  

 效果图&#xff1a;

 

4.Intent的Type属性

Intent的Type属性显式指定Intent的数据类型&#xff08;MIME&#xff09;。一般Intent的数据类型能够根据数据本身进行判定&#xff0c;但是通过设置这个属性&#xff0c;可以强制采用显式指定的类型而不再进行推导。
 

5.Intent的Compent属性

Intent的Compent属性指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息&#xff0c;比如action、data/type、category进行查找&#xff0c;最终找到一个与之匹配的目标组件。但是&#xff0c;如果 component这个属性有指定的话&#xff0c;将直接使用它指定的组件&#xff0c;而不再执行上述查找过程。指定了这个属性以后&#xff0c;Intent的其它所有属性都是可选的。

 6.Intent的Extra属性

Intent的Extra属性是添加一些组件的附加信息。比如&#xff0c;如果我们要通过一个Activity来发送一个Email&#xff0c;就可以通过Extra属性来添加subject和body。

 下面的例子在第一个Activity的EditText输入用户名&#xff0c;该年龄保存在Intent的Extras属性中。当单击Button时&#xff0c;会在第二个Activity中显示用户名。

first.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" 
  3.     android:orientation&#61;"vertical"   
  4.     android:layout_width&#61;"fill_parent" 
  5.     android:layout_height&#61;"fill_parent" 
  6.     >     
  7.     <TextView     
  8.         android:layout_width&#61;"wrap_content" 
  9.         android:layout_height&#61;"wrap_content"   
  10.         android:text&#61;"请输入用户名"   
  11.         />        
  12.     <EditText   
  13.         android:id&#61;"&#64;&#43;id/EditText1"   
  14.         android:layout_width&#61;"fill_parent" 
  15.         android:layout_height&#61;"wrap_content" 
  16.         />        
  17.     <Button   
  18.         android:id&#61;"&#64;&#43;id/Button1"   
  19.         android:layout_width&#61;"wrap_content" 
  20.         android:layout_height&#61;"wrap_content"   
  21.         android:text&#61;"测试Extras属性" 
  22.         />        
  23. LinearLayout> 

second.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" 
  3.     android:orientation&#61;"vertical"   
  4.     android:layout_width&#61;"fill_parent" 
  5.     android:layout_height&#61;"fill_parent" 
  6.     >         
  7.     <TextView   
  8.         android:id&#61;"&#64;&#43;id/TextView1"   
  9.         android:layout_width&#61;"wrap_content"   
  10.         android:layout_height&#61;"wrap_content" 
  11.         /> 
  12. LinearLayout> 

strings.xml

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <resources> 
  3.     <string name&#61;"hello">Hello World, FirstActivity!string> 
  4.     <string name&#61;"app_name">IntentExtrasDemostring> 
  5. resources> 

FirstActivity.java

  1. package com.android.extras.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.EditText;  
  10.  
  11. public class FirstActivity extends Activity {  
  12.     private Button btn;  
  13.     private EditText etx;  
  14.       
  15.     &#64;Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.first);  
  19.           
  20.         btn &#61; (Button)findViewById(R.id.Button1);  
  21.         etx &#61; (EditText)findViewById(R.id.EditText1);  
  22.           
  23.         btn.setOnClickListener(new OnClickListener() {  
  24.             &#64;Override  
  25.             public void onClick(View v) {  
  26.                 Intent intent &#61; new Intent();  
  27.                 //设置Intent的class属性&#xff0c;跳转到SecondActivity  
  28.                 intent.setClass(FirstActivity.this, SecondActivity.class);  
  29.                 //为intent添加额外的信息  
  30.                 intent.putExtra("useName", etx.getText().toString());  
  31.                 //启动Activity  
  32.                 startActivity(intent);  
  33.             }  
  34.         });         
  35.     }  

SecondActivity.java

  1. package com.android.extras.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.widget.TextView;  
  7.  
  8. public class SecondActivity extends Activity {  
  9.     private TextView tv;  
  10.       
  11.     &#64;Override 
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         //设置当前的Activity的界面布局  
  15.         setContentView(R.layout.second);  
  16.         //获得Intent  
  17.         Intent intent &#61; this.getIntent();         
  18.         tv &#61; (TextView)findViewById(R.id.TextView1);  
  19.         //从Intent获得额外信息&#xff0c;设置为TextView的文本  
  20.         tv.setText(intent.getStringExtra("useName"));  
  21.     }  

注意&#xff1a;在添加第二个Activity SecondActivity的时候&#xff0c;要在AndroidManifest.xml里面添加上SecondActivity&#xff0c;具体如下&#xff0c;即是在15行的后面添加上16~18行的代码。如果不这样做&#xff0c;就会在模拟器上出现错误。

  1. xml version&#61;"1.0" encoding&#61;"utf-8"?> 
  2. <manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android" 
  3.       package&#61;"com.android.extras.activity" 
  4.       android:versionCode&#61;"1" 
  5.       android:versionName&#61;"1.0"> 
  6.     <uses-sdk android:minSdkVersion&#61;"10" /> 
  7.  
  8.     <application android:icon&#61;"&#64;drawable/icon" android:label&#61;"&#64;string/app_name"> 
  9.         <activity android:name&#61;".FirstActivity" 
  10.                   android:label&#61;"&#64;string/app_name"> 
  11.             <intent-filter> 
  12.                 <action android:name&#61;"android.intent.action.MAIN" /> 
  13.                 <category android:name&#61;"android.intent.category.LAUNCHER" /> 
  14.             intent-filter> 
  15.         activity> 
  16.         <activity android:name&#61;".SecondActivity" 
  17.                   android:label&#61;"&#64;string/app_name"> 
  18.         activity> 
  19.     application> 
  20. manifest> 

效果图&#xff1a;

原博&#xff1a;http://liangruijun.blog.51cto.com/3061169/634411/


推荐阅读
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 如何正确配置Log4j以优化日志记录效果? ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
author-avatar
何俊雨_127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有