安卓清单文件-意图过滤器和活动

16

请问有人能解释清楚清单中的以下行 -

    <activity
        android:name=".AboutUs"
        android:label="@string/app_name">
        <intent-filter >
            <action android:name="com.example.app1.ABOUT" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>

    </activity>    

活动和意图筛选器中的字段在什么情况下很重要,何时会使用或提及它们?抱歉,我尝试阅读了文档,但仍然无法弄清楚太多。

谢谢


对于“DEFAULT”类别,您可以查看此答案 - Gabriel Petrovay
请查看文档:http://developer.android.com/guide/topics/manifest/manifest-intro.html - Raghunandan
3个回答

21
android:name=".AboutUs"

这是您的 Activity 类的名称,前面的点是缩写表示您的包名。因此,实际上代表这个 Activity 的 Java 文件称为 AboutUs.java,其完整路径为 com.your.package.name.AboutUs

android:label="@string/app_name"

标签是在启动器中显示(如果活动列在启动器中)并在打开活动时出现在窗口顶部的字符串。

<intent-filter > ... </intent-filter>

意图过滤器定义了你的活动所“监听”的意图,以便启动。

<action android:name="com.example.app1.ABOUT" />
<category android:name="android.intent.category.DEFAULT"/>

在 Intent 被“触发”之前,动作和类别都是在其上设置的字段。然后系统将查找与动作和类别都匹配的任何活动,如果找到一个,则启动该活动;如果找到多个,则向用户显示它们并让他们选择。

在您的情况下,您正在监听的动作 com.example.app1.ABOUT 是特定于您的应用程序的自定义动作,而不是系统动作之一。

因此,以下是启动此特定活动的意图可能看起来像什么:

Intent i = new Intent();
i.setAction("com.example.app1.ABOUT");
i.addCategory("android.intent.category.DEFAULT");
startActivity(i);

请注意,由于您创建了自定义操作,因此此意图不需要访问您的AboutUs.class,因此该意图在设备上的任何应用程序中都可以被触发,并且会启动到您的活动中。


非常好的答案!正是我需要的。不过我有一个疑问。我通常是这样启动一个活动的 -`Intent i = new Intent("com.example.app1.ABOUT");` `startActivity(i);`这个方法很好用,那么这是否意味着我可以跳过setCategory部分?非常感谢! - Ankit Rustagi
1
没问题,可以这样做,因为你使用了“DEFAULT”,所以可以跳过类别。 - FoamyGuy

1

对于ACTION,您有answer,对于默认类别,您有answer


1
一个Activity是一个应用程序组件,它提供了一个屏幕供用户与之交互,以完成某些操作,例如拨打电话、拍照、发送电子邮件或查看地图。要声明您的Activity,请打开清单文件并将一个元素作为元素的子元素添加,就像您的示例一样。
  • android:name属性是唯一必需的属性,它指定Activity的类名。
  • android:label属性是整个应用程序的可读标签,并且是每个应用程序组件的默认标签。
元素还可以使用元素指定各种意图过滤器,以声明其他应用程序组件如何激活它。
  • 元素指定这是应用程序的“主”入口点。
  • 元素指定此Activity应在系统的应用程序启动器中列出(以允许用户启动此Activity)。
请参阅http://developer.android.com/guide/components/activities.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接