Android---把用户带入另外一个应用程序(一)

本文译自:http://developer.android.com/training/basics/intents/sending.html

Android的重要特性之一就是基于要执行的特定的“action”把用户带入另外一个应用程序。例如,如果你的应用程序有一个要在地图上显示的地址,你不必在你的应用程序创建一个用于显示地图的Activity。相反,你可以使用Intent对象给地图应用程序的View创建一个请求,然后Android系统就会启动对应的应用程序,病在地图上显示你给出的地址。

在讲解第一课时---创建你的第一个应用程序,在你自己的应用程序中的Activity间,你必须使用Intent对象来导航。通常要使用明确的Intent对象,其中明确的定义了你想要启动的组件的类名。但是,当你要实行不同的应用程序中的一个操作时,你必须要使用一个隐含的Intent对象。

本节课会告诉你如何给一个特殊的操作创建一个隐含的Intent对象,以及如何使用这个对象来启动另外一个应用程序中Activity来执行对应的操作。

创建一个隐含的Intent对象

隐含的Intent对象不会声明要启动的组件的类名,相反它会声明一个要执行的操作。这个操作指定了你想要做的事情,如浏览、编辑、发送或获取某些事情。Intent对象还经常会包括跟操作相关联的数据,如你想要浏览的网址,或要发送Mail的电子邮件地址。根据你创建的Intent,关联的数据可以是一个Uri,这是最常见的几种数据类型之一,或者也完全可以不需要数据。

如果你的数据时一个Uri,那么就可以简单的使用Intent()构造器来定义操作和数据。

例如,下例代码创建了一个Intent对象,它会使用Uri中指定的电话号码来启动电话呼叫程序:

Uri number=Uri.parse("tel:5551234"); 
Intent
callIntent = new Intent(Intent.ACTION_DIAL, number);

当你的应用程序通过调用startActivity()方法来调用这个Intent对象时,电话应用程序会使用给定的号码来发起一个呼叫。

以下是另外两个Intent的操作和Uri数据对:

1. 浏览一个地图

// 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);

2. 浏览一个网页

Uri webpage =Uri.parse("http://www.android.com"); 
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);

隐含的Intent对象还会要求提供不同数据类型的额外数据,如字符串。你可以使用各种putExtra()方法来添加一个或多个额外数据。

默认情况下,系统会通过一个Intent对象上的Uri所包含的数据来判断对应的MIME类型,如果你没有在Intent对象中包含Uri,那么通常你应该使用setType()方法来指定跟Intent对象关联的数据的类型。设定MIME类型会进一步指定由那种类型的Activity来接收Intent对象。

以下是一些给指定的操作添加额外数据的Intent对象:

1. 发送带有附件的email:

Intent emailIntent =newIntent(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, "Email subject"); 
emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); 
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); 
// You can also attach multiple items by passing an ArrayList of Uris

2. 创建一个日历事件:

Intent calendarIntent=newIntent(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, "Ninja class"); 
calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");

注意:这个针对日历事件的Intent对象只在API level 14以上的版本才会被支持。

注意:重要的是,你要尽可能的具体的了解你要定义的Intent对象。例如,如果你想要使用ACTION_VIEW类型Intent来显示一张图片,那么你应该指定一个image/*MIME类型。这样会防止能够浏览其他类型数据应用程序被这个Intent对象所触发。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值