【问题标题】:why do we need intent filter in android?为什么我们需要在 android 中使用意图过滤器?
【发布时间】:2015-10-10 00:40:09
【问题描述】:

这可能是一个非常愚蠢的问题,但我不太清楚答案。

  1. 我的隐式意图包含一个操作、数据和类别(可选),我在通过 startActivity 或 startService 发送意图时传递了这些。

我们通常会这样做,

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "Standing on the Moon!");
startActivity(intent);

然后我们以不同的方式完成相同的操作,使用清单文件中的意图过滤器,如

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

我的问题 - 两种声明方式是出于相同目的,两种不同的声明方式,它们是否具有不同的意义???

【问题讨论】:

  • 第一个是调用,第二个是声明。这就像说你不需要方法签名,因为你调用了你的方法,所以它们必须存在。
  • 在启动您自己的应用程序的组件时不要使用隐式 Intent - 使用显式引用您的 ShareActivity.class 的显式 Intent。不使用隐式 Intent 的原因是你不能保证你的应用组件会被使用,你可能会看到意想不到的行为。

标签: android android-manifest intentfilter android-implicit-intent


【解决方案1】:

我记得,将您的应用程序作为清单文件中的意图过滤器引用将使其他应用程序知道您有能力处理该意图。因此,如果您能够发送邮件并且您在清单中以这种方式注册自己,那么另一个应用程序可以使用您的来发送电子邮件。

这在图库应用程序中很常见。应用程序很少创建自己的,除非它们本身是图库应用程序。因此,他们会询问 Android 系统有哪些可用的图库/邮件应用程序,并让您从列表中选择一个。当您将自己注册为能够处理此意图的应用程序时,您会在此列表中找到您的应用程序。

我确实认为这是两者之间的主要区别之一,因为其他应用程序不知道程序化实例化。

【讨论】:

  • 谢谢...正是我正在寻找的答案。
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2014-08-19
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多