不同的 Intent 构造函数有什么作用?
What purpose do different Intent constructors serve?
Intent(String action, Uri uri)
Create an intent with a given action and for a given data url.
Intent(Context packageContext, Class<?> cls)
Create an intent for a specific component.
Intent(String action, Uri uri, Context packageContext, Class<?> cls)
Create an intent for a specific component with a specified action and data.
虽然这对某些人来说可能是显而易见的,但你们能帮助我们这些遇到困难的人吗"getting it"?
例如,在什么情况下我想要 1 个?
有两种意图:
Explicit intents
指定要按名称启动的组件(完全限定的 class 名称)。您通常会使用显式意图在您自己的应用程序中启动组件,因为您知道要启动的 activity 或服务的 class 名称。例如,启动新的 activity 以响应用户操作或启动服务以在后台下载文件。
Implicit intents
不命名特定组件,而是声明要执行的一般操作,这允许来自另一个应用程序的组件处理它。例如,如果您想向用户显示地图上的位置,您可以使用隐式意图请求另一个有能力的应用程序在地图上显示指定位置。
当您创建启动 activity 或服务的显式 Intent 时,系统会立即启动 Intent 对象中指定的应用程序组件。
创建隐式 Intent 时,Android 系统通过将 Intent 的内容与设备上其他应用程序的清单文件中声明的 Intent 过滤器进行比较,找到合适的组件来启动。如果意图与意图过滤器匹配,系统将启动该组件并向其传递 Intent 对象。如果多个 Intent 过滤器兼容,系统会显示一个对话框,以便用户选择要使用的应用程序。
阅读更多内容:Intents and Intent Filters
回到你的问题,所有这三种结构都是创建隐式/显式意图的方法。其中
Intent(String action, Uri uri)
使用给定的操作和 uri 创建一个 implicit intent。
Intent(Context packageContext, Class<?> cls)
创建明确的意图。
Intent(String action, Uri uri, Context packageContext, Class<?> cls)
使用给定的操作和 uri 创建一个明确的意图。
-在隐式意图的情况下,只要您想执行某些操作[Intent.ACTION_DIAL,Intent.ACTION_VIEW],就可以使用带有 "Action" 字符串的 Intent。指定一个 broadcastreceiver 来广播一些消息。
-Intent(Context packageContext, Class cls) 当你只想从现有的 activity 调用新的 activity 时,你可以使用它。
案例 1:要求执行特定 操作(称为隐式意图),
IE。
Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555"))
上面的 Dials a phone #,在某些情况下,如果有多个应用程序可以执行该操作,它会打开一个选择器对话框,其中可以显示:
完成动作
拨号器
My_dialer
并等待用户选择。
案例 2:通过引用其名称(明确意图)启动另一个 activity
即
Intent(Context.this,ActivityToBeLaunched.class)
案例 3:Its 前两个的混合:
告诉 activity 启动做一些特定的事情
IE。
Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555",Context.this,ActivityToBeLaunched.class))
希望这能加深您对 Intents 的理解!
Intent(String action, Uri uri)
Create an intent with a given action and for a given data url.
Intent(Context packageContext, Class<?> cls)
Create an intent for a specific component.
Intent(String action, Uri uri, Context packageContext, Class<?> cls)
Create an intent for a specific component with a specified action and data.
虽然这对某些人来说可能是显而易见的,但你们能帮助我们这些遇到困难的人吗"getting it"?
例如,在什么情况下我想要 1 个?
有两种意图:
Explicit intents
指定要按名称启动的组件(完全限定的 class 名称)。您通常会使用显式意图在您自己的应用程序中启动组件,因为您知道要启动的 activity 或服务的 class 名称。例如,启动新的 activity 以响应用户操作或启动服务以在后台下载文件。Implicit intents
不命名特定组件,而是声明要执行的一般操作,这允许来自另一个应用程序的组件处理它。例如,如果您想向用户显示地图上的位置,您可以使用隐式意图请求另一个有能力的应用程序在地图上显示指定位置。
当您创建启动 activity 或服务的显式 Intent 时,系统会立即启动 Intent 对象中指定的应用程序组件。
创建隐式 Intent 时,Android 系统通过将 Intent 的内容与设备上其他应用程序的清单文件中声明的 Intent 过滤器进行比较,找到合适的组件来启动。如果意图与意图过滤器匹配,系统将启动该组件并向其传递 Intent 对象。如果多个 Intent 过滤器兼容,系统会显示一个对话框,以便用户选择要使用的应用程序。
阅读更多内容:Intents and Intent Filters
回到你的问题,所有这三种结构都是创建隐式/显式意图的方法。其中
Intent(String action, Uri uri)
使用给定的操作和 uri 创建一个 implicit intent。Intent(Context packageContext, Class<?> cls)
创建明确的意图。Intent(String action, Uri uri, Context packageContext, Class<?> cls)
使用给定的操作和 uri 创建一个明确的意图。
-在隐式意图的情况下,只要您想执行某些操作[Intent.ACTION_DIAL,Intent.ACTION_VIEW],就可以使用带有 "Action" 字符串的 Intent。指定一个 broadcastreceiver 来广播一些消息。 -Intent(Context packageContext, Class cls) 当你只想从现有的 activity 调用新的 activity 时,你可以使用它。
案例 1:要求执行特定 操作(称为隐式意图), IE。
Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555"))
上面的 Dials a phone #,在某些情况下,如果有多个应用程序可以执行该操作,它会打开一个选择器对话框,其中可以显示:
完成动作 拨号器 My_dialer
并等待用户选择。
案例 2:通过引用其名称(明确意图)启动另一个 activity 即
Intent(Context.this,ActivityToBeLaunched.class)
案例 3:Its 前两个的混合: 告诉 activity 启动做一些特定的事情 IE。
Intent(INTENT.ACTION_DIAL,Uri.parse("555-555-5555",Context.this,ActivityToBeLaunched.class))
希望这能加深您对 Intents 的理解!