使用android我意识到隐含意图在大多数情况下是很好的选择,因为它们具有灵活性。但是什么是显性意图呢?使用它们有什么好处?什么是常见的情况,使用它们是一个好习惯?
Implicit Intents不直接指定应该调用的Android组件,它只指定要执行的操作。 Uri可以与隐含意图一起使用以指定数据类型。
例如
Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));
这将导致Web浏览器打开网页。 Android系统搜索为特定操作和数据类型注册的所有组件。如果找到许多组件,则用户可以选择要使用的组件。
在应用程序本身中使用显式意图,其中一个活动可以切换到其他活动...示例Intent intent = new Intent(this,Target.class);
这导致活动从当前上下文切换到目标活动。显式意图也可用于使用putExtra
方法将数据传递到其他活动,并通过getIntent().getExtras()
方法通过目标活动检索。
希望这有帮助。
您通常使用显式意图在您自己的应用程序中启动活动。此时,您确切地知道要启动哪个活动,因此没有理由进行设置隐式意图的额外工作。
1)显式意图:组件名称开发者知道,在Intent中指定的名称。
2)隐含意图:未在Intent中指定组件。
明确的意图:
当您确切知道哪个Activity
可以处理您的请求时,请使用显式意图。
示例:您有一个列表活动,当您单击列表中的项目时,它会打开一个详细信息活动。在这种情况下,您知道应用程序的DetailActivity.class
可以显示或处理项目的详细信息。因此,要执行此操作,您可以通过显式指定类名来创建Intent。
Intent showDeatil = new Intent(this,DetaiActivy.class);
startActivity(showDeatil);
隐含意图:
当您不知道哪个应用程序的哪个活动可以处理您的请求时,请使用隐式意图。
示例:您有一个链接。当您单击该链接时,它应该在某些浏览器中打开该网页。您不确切知道哪个应用程序可以处理您的请求。你只是有一个模糊的想法,它的网页链接,所以当有人打开它时,它应该在某个浏览器中打开一个网页。在这种情况下,您只需指定ACTION,然后OS负责其余部分。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
有一个术语。它被称为意图解析。 在意图分辨率。
有时可能没有与ACTION匹配的Activity。在这种情况下,您将获得NullPointerException。所以更优选的方式就是这样
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
假设您已经编写了一些浏览器应用程序。如果您希望在有人打开链接时您的应用程序显示在弹出列表中。然后,您必须使用Intent Filters AndroidManifest.xml文件注册您的Activity。像这样。
<application
..... >
......
<activity android:name=".YourBrowserActivity">
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="www.example.com" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
.....
</application>
参考 Common Intent ACTIONS and their Intent-Filters list More on Intent filters and Intent resolution
来自Docs:
有两种类型的意图:
我们可以简单地描述这样的意图..
显式意图:它们用于单个应用程序中两个活动之间的通信。
例如:考虑一个具有由两个字段组成的登录页面的应用程序(比如用户名和密码)。如果两者都是真的,它将引导我们到一个显示我们之前输入的用户名字段的页面。在这种情况下,我们使用显式意图,因为我们需要更改活动并将数据从一个活动传递到同一个应用程序中的另一个活动(用户名字段)。
隐含意图:它们用于不同应用程序的两个活动之间的通信。
例如:考虑一个新闻应用程序,该应用程序描述了在Facebook上记录和上传事故视频的事故。点击新闻应用程序中给出的链接,它将引导我们进入Facebook。在这种情况下,通信是在新闻应用程序中的活动和Facebook应用程序中的活动之间。为此,我们使用隐式意图。
我希望你能够明白。