安卓应用程序之间的交互
一个典型的安卓应用程序一般有多个activity。每一个activity就是一个用户界面,每个界面允许用户做一些交互性多做(如填写信息、看地图、拍照)。要想从一个activity跳到另个一activity,你就要用到Intent类来定义这个转向及其动作。当你通过Intent告诉系统要打开另一个activity会用到startActivity()方法,系统会用Intent来确认和启动适当的组件。使用Intents甚至可以在一个的activity中打开另一个单独App中的activity。
Intent可以显式的启动一个特定的组件(Activity实例),或隐式的启动任何组件来处理预定义的动作(如:“捕获照片)。
这个类告诉我们怎样用Intent来执行一些和其他程序之间的基本交互,例如启动另一个应用程序,从另个app那接受一个结果,并且能够从其他程序中能够反馈您的程序的意图。
在当前程序中跳到里打开另一个程序。
Android的一个重要特征就是可以让程序根据一个将要执行的“action“来启动另一个程序。例如,在你的程序中想要打开一个地图应用程序,不需要重新建一个activity来显示地图。这样,你可以用Intent来向视图发送一个请求。然后,安卓系统就会启动一个程序在地图上查看地址。
就像先前说的,建立你的第一个app,你可以用Intent在你程序中的多个activity中跳转。你通常会用一个显示的Intent来定义你启动组件的名字。然而,当你想要启动一个action,如查看地图,你必须用一个隐式的Intent。
这一节将讲解怎样为一个特定的action创建一个隐式的Intent,怎样用这个intent来启动一个程序并在里面执行action。
创建一个隐式Intent:
隐式的intents不用声明要启动组件的名字,但却会声明一个将要执行的action。这个action将指定你想要做的动作,如:视图、编辑、发送、或是获得一些事情。Intent有时也会包括关于这个动作的一些数据,如你想查看View的地址,或是你想发送的email信息。依据你想要建立的Intent,这些数据也许是个Uri,或是其他一些数据形式,或者这个intent就不需要任何数据。
如果你的数据是一个uri,下面是一个简单的Intent()构造器,你可以用来定义action和data。
例如:下面是怎样创建一个Intent用uri来启动列出的电话上的号码。
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL,number);
当你的程序利用startActivity()掉用了这个intent,手机程序将会给这个号码拨打电话,
这里是一些其他intents和他们的action
、uri数据:
// Map point based on address
Uri location =Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
// Or map point based on latitude/longitude
// Uri location =Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
Intent mapIntent = new Intent(Intent.ACTION_VIEW,location);
Uri webpage =Uri.parse("http://www.android.com");
Intent webIntent = new Intent(Intent.ACTION_VIEW,webpage);
其他隐式类型的Intent需要“额外”的能够提供不同数据类型(如string)的数据。你可以用多个putExtra()方法添加更多的不同类型的数据。
默认情况下,系统会根据带有uri在里面的Intent来确定一个适当的MIME类型。如果你的Intent不报还uri,你通常需要用setType()去指定关于intent的数据类型。设置MIME类型,进一步指明那个活动将要接受这个Intent。
这里是更多的Intent,他附带了额外的数据来指定需要的动作。
用一个附件发送email:
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// The intent does not have a URI, so declare the"text/plain" MIME type
emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"jon@example.com"}); // recipients
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Emailsubject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Emailmessage text");
emailIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("content://path/to/email/attachment");
// You can also attach multiple items by passing anArrayList of Uris
打开一个日历表:
Intent calendarIntent = new Intent(Intent.ACTION_INSERT,Events.CONTENT_URI);
Calendar beginTime = Calendar.getInstance().set(2012, 0,19, 7, 30);
Calendar endTime = Calendar.getInstance().set(2012, 0,19, 10, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,beginTime.getTimeInMillis());
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,endTime.getTimeInMillis());
calendarIntent.putExtra(Events.TITLE, "Ninjaclass");
calendarIntent.putExtra(Events.EVENT_LOCATION,"Secret dojo");
注意:1.这个intent的创建日历表时间只在API 14或更高支持
2.把你的intent定义的非常详细是很重要的。例如,如果你想要用ACTION_VIEW显示一个图片,你需要指明“image/*”的MIME类型。这样可以阻止程序中从一个被触发的Intent看到其他的数据(像一个地图程序)。
用Intent开始一个Activity
一但你创建了Intent并给他设置了数据信息,调用startActivity
()方法来传递给系统。如果系统识别对于一个activity能够操作这个intent,他将显示一个选择性的dialog(如下图)让用户做出选择。否则,将直接打开将要启动的程序。
startActivity(intent);
这里是一个完整的例子,展示了怎样建立intent来打开地图,确认有一个程序可以操作这个Intent,然后启动它:
// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW,location);
// Verify it resolves
PackageManager packageManager =
getPackageManager();
List<ResolveInfo> activities =packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(mapIntent);
}
显示一个应用程序选择器
当你通过传递Intent到startActivity()启动一个activity,有多个程序来响应这个Intent时,用户可以选择一个默认的程序(在一个dialog底部选择默认如上图)。这样会很方面当用户经常打开同一个应用程序,例如,当打开一个网页(用户一般喜欢用同一个浏览器),或是拍照(用户喜欢用同一个照相机)。但是,如果展示的action可以被多个程序操作,用户喜欢每次用不同的程序(如分享操作),这些需要每次都显示一个dialog来让用户选择要用的程序(用户不能选择哪个默认的app)。
下面代码是怎样显示选择器,用createChooser()创建一个intent,然后传递给startActivity(),例如:
Intent intent = new Intent(Intent.ACTION_SEND);
...
// Always use string resources for UI text. This sayssomething like "Share this photo with"
String title =getResources().getText(R.string.chooser_title);
// Create and start the chooser
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);
这些将会显示一个带有多个可以反馈给这个Intent的程序列表的dialog,然后传递给createChooser()方法,并用一些好的字符作为他的标题。
原文章地址:http://developer.android.com/training/basics/intents/index.html
分享到:
相关推荐
《Android应用程序开发(第三版)》是由王向辉、张国印、沈洁三位专家编著的教材,这本书深入浅出地介绍了Android平台上的应用开发技术。课件源程序是学习此书的重要辅助资料,提供了丰富的实例和练习,帮助读者更好...
总结,开发Android应用程序,尤其是涉及手机通信录功能的应用,需要掌握Android开发的基本技术,如布局设计、数据库操作、Intent服务的使用以及用户交互的处理。同时,充分的测试和调试也是保证应用质量的关键步骤。...
手势识别是Android应用程序中一个重要的交互方式。GestureRecognizeSample可能是一个实现了自定义手势识别的示例项目,它展示了如何使用Android的手势库(GestureOverlayView)或自定义手势识别算法来解析用户的...
总结来说,Intent在Android应用开发中扮演着非常重要的角色,它不仅可以用来在应用内部的不同Activity之间进行交互,还能够实现与其他应用之间的交互。通过Intent,开发者可以启动其他应用的Activity,处理来自其他...
综上所述,Android应用程序之间的通信涉及到Intent的使用、BroadcastReceiver的监听、ContentProvider的数据共享以及Activity的交互。理解并熟练掌握这些概念对于开发健壮且功能丰富的Android应用至关重要。在实际...
这篇文章将逐步揭示Android应用程序背后的设计思想,从基本的 APK 文件结构到更复杂的系统组件和编程模型。 首先,让我们深入了解 APK 文件。APK 是 Android 应用程序的基本打包格式,实质上是一个被压缩的 ZIP ...
在安卓应用开发中,数据库交互是不可或缺的一部分,它使得应用程序能够存储、检索和管理用户数据。本主题将深入探讨如何通过HttpClient与服务器进行通信,并利用Servlet处理数据库操作,最后将结果返回给Android...
《Android应用程序开发与典型案例》是一本专为Android开发者编写的实战型教材,旨在帮助学习者深入理解Android应用的开发流程,并通过丰富的实际案例提升技能。这本书由华清远见教育集团出版,是Android培训课程中的...
3. Intent 机制:Android 桌面应用程序使用 Intent 机制来实现组件之间的交互,包括 Activity、Service、BroadcastReceiver 等。 4. 应用程序入口管理:Android 桌面应用程序需要管理应用程序的入口,包括自定义桌面...
这个项目主要涉及的是Android应用程序与基于ASP.NET的服务器端进行数据交换和交互的技术。Android是Google开发的一款开源操作系统,广泛应用于智能手机和平板电脑等移动设备。而ASP.NET则是微软开发的一个用于构建...
在IT行业中,安卓(Android)是一种广泛使用的操作系统,主要用于...通过深入研究这个"好用的Android应用程序源代码",开发者不仅可以学习到安卓应用的基本构建块,还能掌握实际开发中的最佳实践,从而提升自己的技能。
在Android平台上,小程序是一种轻量级的应用形式,它允许开发者快速构建功能丰富的应用程序,而无需进行繁琐的安装过程。这个“Android小程序源代码集合”是一个极好的资源,适合初学者入门,同时也因为其简单易懂的...
在Android应用程序设计中,开发者需要掌握一系列技术和工具来创建功能丰富的移动应用。本主题主要聚焦于Android系统的架构、开发环境的搭建以及应用的基本组件。以下是对这个主题的详细阐述: 一、Android系统架构 ...
这类应用程序通常涉及到Android应用层与系统内核之间的通信,这对于理解Android系统的架构和开发定制化硬件解决方案至关重要。以下是关于这个主题的一些详细知识点: 1. **Android系统架构**:Android操作系统分为...
《Android应用程序设计》这本书是Android开发领域的经典之作,旨在帮助读者深入理解Android应用的开发流程和技术。本书涵盖了从基础知识到高级特性的全方位内容,对于想要踏入Android开发领域或者提升现有技能的...
【安卓应用程序实例】这个压缩包提供了11个实用的Android应用程序源代码,是学习和深入理解Android开发的宝贵资源。对于那些对Android编程感兴趣的人来说,这些实例能够帮助他们快速掌握核心概念并提升实践能力。 ...
在Android操作系统中,应用间的交互是通过Intent机制实现的,这是一种强大的消息传递方式,使得不同的应用程序组件能够相互调用和传递数据。本篇文章将详细探讨如何利用隐式Intent在Android应用间进行通信。 首先,...
Android应用源码(精)记事本小程序,加注释,适合阅读.rar Android应用源码Android平台下通过HTTP协议实现断点续传下载.rar Android应用源码Hibernate4Android.rar Android应用源码http、udp、tcp网络交互组件.rar ...