我正在阅读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是由作者组成的名称。它真的没有意义,对吗?它有什么用途?
答案 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')
如果你把它放在清单中,你就是在声明它,它就不再那么私密了。