首页 > 代码库 > Android(Intent 学习)

Android(Intent 学习)

Intent 是一个消息传递对象,Intent可以通过多种方式促进组件之间的通信,基本的三种用例:

启动Acitivity:

  Activity表示应用中的一个屏幕,通过将Intent传递给startActivity(),您可以启动新的Activity实例。Intent描述了要启动的Activity,并携带了任何必要的数据.
启动服务:

  Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。

传递广播:

  广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()sendOrderedBroadcast() 或 sendStickyBroadcast(),您可以将广播传递给其他应用。

  

Intent类型

显式Intent:按名称(完全限定类名)指定要启动的组件.

隐身Intent:不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。 例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。

  

Intent中包含的主要信息:
 组件名称(可选项,如果无组件名称则是隐式Intent)

  使用 setComponent()setClass()setClassName() 或 Intent 构造函数设置组件名称。

 操作

  指定要执行的通用操作的字符串,指定自己的操作,供 Intent 在您的应用内使用(或者供其他应用在您的应用中调用组件)。但是,您通常应该使用由 Intent 类或其他框架类定义的操作常量。以下是一些用于启动 Activity 的常见操作:

  

    ACTION_VIEW
如果您拥有一些某项 Activity 可向用户显示的信息(例如,要使用图库应用查看的照片;或者要使用地图应用查看的地址),请使用 Intent 将此操作与 startActivity() 结合使用。
     ACTION_SEND
这也称为“共享”Intent。如果您拥有一些用户可通过其他应用(例如,电子邮件应用或社交共享应用)共享的数据,则应使用 Intent 将此操作与 startActivity() 结合使用。

 

      使用 setAction() 或 Intent 构造函数为 Intent 指定操作。

  

 数据

  创建 Intent 时,除了指定 URI 以外,指定数据类型(其 MIME 类型)往往也很重要。例如,能够显示图像的 Activity 可能无法播放音频文件,即便 URI 格式十分类似时也是如此。因此,指定数据的 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件。但有时,MIME 类型可以从 URI 中推断得出,特别当数据是 content: URI 时尤其如此。这表明数据位于设备中,且由 ContentProvider 控制,这使得数据 MIME 类型对系统可见。

要仅设置数据 URI,请调用 setData()。 要仅设置 MIME 类型,请调用 setType()。如有必要,可以使用 setDataAndType() 同时显式设置二者。

 类别

  一个包含应处理 Intent 组件类型的附加信息的字符串。常见类别:
  CATEGORY_BROWSABLE 目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。

  CATEGORY_LAUNCHER 该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。

  

  有关类别的完整列表,请参阅 Intent 类描述。

  使用 addCategory() 指定类别。

 

显式 Intent 示例

  显式 Intent 是指用于启动某个特定应用组件(例如,应用中的某个特定 Activity 或服务)的 Intent。

  

// Executed in an Activity, so ‘this‘ is the Context
// The fileUrl is a string URL, such as "http://www.example.com/image.png"
Intent downloadIntent = new Intent(this, DownloadService.class);
downloadIntent.setData(Uri.parse(fileUrl));
startService(downloadIntent);

隐式 Intent 示例

  隐式 Intent 指定能够在可以执行相应操作的设备上调用任何应用的操作。 如果应用无法执行该操作而其他应用可以,且希望用户选取要使用的应用,则使用隐式 Intent 非常有用。

  

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");

// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}



原文链接:https://developer.android.google.cn/guide/components/intents-filters.html#Building

 

Android(Intent 学习)