安卓应用程序之间的交互
一个典型的安卓应用程序一般有多个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应用程序通常都会有若干个Activity,每一个Activity都让用户执行指定的操作(例如查看地图或照相)。把用户从一个Activity带到另一个Activity,必须使用一个Intent去指定你的应用程序“意图”去做的事。当...
Android平板电脑应用程序设计交互原则和设计案
Android应用源码之android与asp.net中的一般处理程序ashx进行交互_ashx
安卓应用程序的基础知识:介绍安卓应用程序的基本结构、组件(Activity、Service、BroadcastReceiver、ContentProvider)以及它们之间的交互方式。 用户界面设计:介绍如何使用XML和Java代码创建安卓应用程序的用户...
Android应用源码(精)记事本小程序,加注释,适合阅读.rar Android应用源码Android平台下通过HTTP协议实现断点续传下载.rar Android应用源码Hibernate4Android.rar Android应用源码http、udp、tcp网络交互组件.rar ...
一个允许Android应用程序与BLE Beacon 交互的库
在Android应用程序中,有一类特殊的消息,是专门负责与用户进行交互的,它们就是触摸屏和键盘等输入事件。触摸屏和键盘事件是统一由系统输入管理器InputManager进行分发的。也就是说,InputManager负责从硬件接收...
Android应用源码之android与asp.net中的一般处理程序ashx进行交互.zip项目安卓应用源码下载Android应用源码之android与asp.net中的一般处理程序ashx进行交互.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2....
在不同应用程序之间交互数据(跨进程通讯),在Android SDK中提供了4种用于跨进程通讯的方式。 这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity...
Shutdown一个交互式处理应用程序关闭的Android库
基于IOS、Android手机设备应用程序交互适配设计研究报告.docx
android与asp.net中的一般处理程序ashx进行交互.zip项目安卓应用源码下载android与asp.net中的一般处理程序ashx进行交互.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司...
可与数字电视进行信息交互的Android应用程序设计费.pdf
Android应用源码安卓源码(172个合集),可以做为你的学习参考。 365MobileSecretary v1.0.6(365手机助手AIDL) 888个经典 Logo.rar AdXmpp(Openfire+asmack+spark) .zip AidlDemo(简单aidl的例子) aidl跨进程调用....
在这项工作中,我们开发了一个移动应用程序来为用户提供交互式支持,从而补充了其他可用的解决方案,例如SMS和其他智能手机应用程序。 该应用程序的主要优点是具有互动功能,可以实现医患沟通。 我们采用了快速应用...
具有与IPTV终端进行交互功能的Android应用程序设计[整理].pdf
《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、...
手机应用程序中用户与文本的交互 在手机应用程序中支持屏幕键盘 在手机应用程序中嵌入字体 在手机控件中使用 HTML 文本 第 6 章: 外观设计 手机外观设计的基础知识 为手机应用程序创建外观 应用自定义手机外观 ...
◆ 深入分析了Android应用程序的组件和生命周期 ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界 面在手机、平板电脑和电视上都引人注目 ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务 的...
Android应用源码之android与asp.net中的一般处理程序ashx进行交互.zip