【问题标题】:What is the purpose of a custom category or action?自定义类别或操作的目的是什么?
【发布时间】:2011-09-02 23:45:17
【问题描述】:

我正在阅读 Wei-Mung Lee 的《开始 Android 应用程序开发》。我对自定义操作和类别感到困惑。

这是一个示例中的一些代码。动作是一个包名。唯一一次再次被提及是在

Intent i = new Intent( "net.learn2develop.MyBrowser" );

开始一项活动。这个基本上是包名的action怎么会知道启动一个activity呢?仅仅因为它在活动标签内?

与类别标签相同(不同示例):

<intent-filter>
   <action android:name=”android.intent.action.VIEW” />
   <action android:name=”net.learn2develop.MyBrowser” />
   <category android:name=”android.intent.category.DEFAULT” />
   <category android:name=”net.learn2develop.Apps” />
   <data android:scheme=”http” />
</intent-filter>

net.learn2develop.Apps 是作者编造的名称。真的没有意义吧?它有什么用途?

【问题讨论】:

    标签: android android-manifest


    【解决方案1】:

    这个基本上是包名的action怎么知道启动一个activity呢?

    因为活动的&lt;intent-filter&gt; 宣传它可以通过该操作字符串启动。顺便说一句,仅仅因为它写得像一个包名并不意味着它必须是一个包名(例如,android.intent.action.VIEW 不是一个包)。包命名约定是为了防止与其他已安装的应用程序发生意外冲突。

    真的没有意义吧?

    嗯,这对作者来说可能意味着什么,虽然我不能告诉你到底是什么。

    它有什么用途?

    在正常的 Android 开发中,您不会创建自定义类别。我不记得曾经见过,而且我从事 Android 开发已经有一段时间了。

    类别通常用于区分不同的用例。例如,除了DEFAULT 之外,第二受欢迎的类别可能是BROWSABLE。支持BROWSABLE 类别中的VIEW 操作的活动有资格从Web 浏览器中的链接使用。因此,如果我有VIEW/BROWSABLE 的活动和application/pdf 的 MIME 类型,并且用户在浏览器中单击了指向 PDF 文件的链接,则可以选择我查看 PDF。但是,如果我缺少 BROWSABLE 作为一个类别,那么我将没有资格获得该链接。通常情况下,如果一个活动可以检索到一个 HTTP URL,它只会宣传BROWSABLE

    不过,我想不出我会使用自定义类别的场景。

    【讨论】:

    • 当我有两个并行运行的服务时,我正在使用类别。他们都使用第三种服务并获得成功和失败的广播。他们都为同一个动作注册了两个不同的接收者,但我只希望调用者服务接收动作而不是他们两个,所以他们用不同的类别注册相同的动作:)来自关于类别的android开发者指南:“一个字符串包含有关应处理意图的组件类型的其他信息”
    【解决方案2】:

    它有什么用途?

    在绝大多数情况下,设置类别几乎没有用处。但是,如果您希望导出BroadcastReceiver(即让其他应用程序可以向其广播),但您希望限制哪些应用程序可以实际触发接收器,则一种方法是使用只有这些应用程序知道的私有类别应用程序。

    显然这必须以编程方式完成:

    intent.addCategory('com.super.dooper.thing.my_sectrect_category')
    

    如果你把它放在清单中,你就是在声明它,它就不再那么私密了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2012-03-21
      • 1970-01-01
      • 2013-02-06
      相关资源
      最近更新 更多