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