自定义类别或操作的目的是什么?

时间:2011-09-02 23:45:18

标签: android android-manifest

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

以下是一个示例中的一些代码。该操作是包名称。它再次被引用的唯一时间是

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

开始活动。这个基本上是包名的动作怎么能知道开始活动呢?只是因为它在活动标签内?

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

<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是由作者组成的名称。它真的没有意义,对吗?它有什么用途?

2 个答案:

答案 0 :(得分:8)

  

这个基本上是包名的行为怎么能知道开始活动?

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

  

它真的没有意义,对吗?

嗯,这可能对作者意味着什么,虽然我无法告诉你究竟是什么。

  

它的目的是什么?

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

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

尽管如此,我无法想到我会使用自定义类别的情况。

答案 1 :(得分:1)

  

它的目的是什么?

对于绝大多数情况,设置类别几乎没有用处。但是,如果您希望导出BroadcastReceiver(即允许其他应用程序向其广播),但您希望限制哪些应用程序可以实际触发接收器,则可以使用仅知道的私有类别对那些应用程序。

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

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

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