第八课:隐式Intent(基于AndroidStudio3.2)

本文详细介绍了Android中隐式Intent的工作原理和使用场景,强调其在程序交互中的松耦合和可插拔性特点。通过隐式Intent,开发者可以声明一个需要执行的动作,而不是特定的组件,允许用户自由选择应用来完成任务。文章还提供了电话、地图、网页浏览等隐式Intent的实例,并提醒在发送Intent前要验证是否有应用能接收,以避免应用崩溃。最后,文章介绍了如何创建和执行隐式Intent的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android的程序交互方法非常独特,因为它非常以用户为中心。它为用户提供了很多权力,可以选择如何操作和创建数据。

我们来看一个Android设备的常见使用场景。 用户打开“联系人”例如,应用并选择John Doe的联系方式。例如,有一个电子邮件地址,一部手机和一个Twitter名称。 用户可以点击John的每一个联系点,每次Android都会启动一个不同的应用程序,默认的电子邮件客户端,拨号器和下载的Twitter应用程序。该用户可能并不关心启动了哪个应用程序或者有多少应用程序目前开放; 他只是想发一条消息。 如果此用户不喜欢电子邮件应用程序或默认的Twitter应用程序,他可以删除这些应用程序并用其他东西替换它们,他应该重新开始工作。

为了实现这种程序交互,Android需要构建平台重点关注松耦合和可插拔性。 一个组件(如联系人应用程序)不应该知道在点击电子邮件地址或手机号码时应该使用哪个应用程序的任何具体细节。

隐式intents并不声明要启动组件的具体类名,而是声明一个需要执行的action。这个action指定了我们想做的事情,例如查看,编辑,发送或者是获取一些东西。Intents通常会在发送action的同时附带一些数据,例如你想要查看的地址或者是你想要发送的邮件信息。数据的具体类型取决于我们想要创建的Intent,比如Uri或其他规定的数据类型,或者甚至也可能根本不需要数据。

下面是一些其他intent的例子:

打电话:

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

显示地图:

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

于另外一些需要extra数据的隐式intent,我们可以使用putExtra()方法来添加那些数据。 默认的,系统会根据Uri数据类型来决定需要哪些合适的MIME type。如果我们没有在intent中包含一个Uri, 则通常需要使用setType()方法来指定intent附带的数据类型。设置MIME type 是为了指定应该接受这个intent的activity。例如:

发送一个带附件的email:

Intent emailIntent = new Intent(Intent.ACTION_SEND);
// The intent does not have a URI, so declare the "text/plain" MIME type
emailIntent
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值