Android Manifest- intent过滤器和活动

Ank*_*agi 15 java eclipse android android-manifest

有人可以解释清单中的以下行 -

    <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>    
Run Code Online (Sandbox Code Playgroud)

活动和意图过滤器中的字段如何重要以及何时使用/引用?对不起,我试图阅读文档,但仍然无法想象.

谢谢

Foa*_*Guy 20

android:name=".AboutUs"
Run Code Online (Sandbox Code Playgroud)

这是您的Activity类的名称,前面的点是您的包的简写表示法.所以这实际上代表了com.your.package.name.AboutUs哪个意味着你的java文件代表这个Activity被调用AboutUs.java

android:label="@string/app_name"
Run Code Online (Sandbox Code Playgroud)

label是启动器中显示的字符串(如果活动在启动器中列出),并且在活动打开时位于窗口顶部.

<intent-filter > ... </intent-filter>
Run Code Online (Sandbox Code Playgroud)

intent filter定义您的活动"侦听"的Intents以便启动.

<action android:name="com.example.app1.ABOUT" />
<category android:name="android.intent.category.DEFAULT"/>
Run Code Online (Sandbox Code Playgroud)

操作和类别都是在Intent被"触发"进入系统之前在Intent上设置的字段.然后,系统将查找与操作和类别相匹配的任何活动,如果找到,则会启动该活动,或者如果找到多个,它将​​向用户显示所有这些活动并让他们选择.

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

所以这是启动此特定活动的意图可能如下所示:

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

请注意,因为您已经创建了自定义操作,AboutUs.class所以此意图不需要访问您的意图,因此技术上可以从设备上的任何应用程序触发此意图,它将启动到您的活动中.