时间:2010-07-23 19:05:51

标签: android android-intent intentfilter

10 个答案:

答案 0 :(得分:61)

intent filter是app的manifest文件中的一个表达式,它指定了组件想要接收的意图类型。

当您创建隐式意图时,Android系统会通过将意图的内容与设备上其他应用的清单文件中声明的意图过滤器进行比较来找到适当的组件。如果intent与intent过滤器匹配,则系统启动该组件并将其传递给Intent对象。

<强>的AndroidManifest.xml

<activity android:name=".HelloWorld"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="http" android:host="androidium.org"/>
    </intent-filter>
</activity>

启动HelloWorld

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://androidium.org"));
startActivity(intent);

答案 1 :(得分:26)

答案 2 :(得分:2)

首先更改xml,将第二个活动标记为DEFAULT

<activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

现在,您可以使用StartActivity方法启动此活动。

答案 3 :(得分:2)

如果你的应用程序被打开,你希望它成为第一个屏幕的Activity,然后在意图类别中将其称为LAUNCHER,其余活动在意图类别中提及默认。

例如: - 有2个活动A和B
   活动A是LAUNCHER,因此在意图类别中将其设为LAUNCHER,B为活动A的子项,因此将其设为默认值。

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ListAllActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

答案 4 :(得分:2)

当您创建隐式意图时,Android系统会通过将意图的内容与设备上其他应用的清单文件中声明的意图过滤器进行比较来找到适当的组件。如果intent与intent过滤器匹配,则系统启动该组件并将其传递给Intent对象。如果多个intent过滤器兼容,系统将显示一个对话框,以便用户可以选择要使用的应用程序。

意图过滤器是应用程序清单文件中的表达式,用于指定组件希望接收的意图类型。例如,通过为活动声明一个意图过滤器,您可以让其他应用程序以某种意图直接启动您的活动。同样,如果您没有为活动声明任何意图过滤器,那么只能以明确的意图启动它。

根据:Intents and Intent Filters

答案 5 :(得分:1)

使用密钥MAINLAUNCHER保留第一个意图过滤器,并添加另一个ANY_NAMEDEFAULT

您的LAUNCHER将成为活动A,DEFAULT将成为您的活动B.

答案 6 :(得分:1)

没有两个Lancher AFAIK。 Logcat是一个有用的工具,用于调试和检查后台的应用程序/机器状态。从一个活动切换到另一个活动时它将是自动的。

答案 7 :(得分:1)

intent filter是一个表达式,它存在于app中的manifest中,用于指定组件要接收的意图类型。 如果组件没有任何意图过滤器,则它可以接收显式意图。 如果具有过滤器的组件则接收隐式和显式意图

答案 8 :(得分:0)

如果可能,试试这个即时解决方案:

Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);

答案 9 :(得分:0)

在清单中有多个意图活动过滤器的情况下,将多个活动设置为主要活动和启动程序。然后,第一个活动被视为启动器活动,然后android启动或打开第一个活动。

<category android:name="android.intent.category.LAUNCHER" />  

上面的代码在设备菜单中提供了一个应用程序图标,因此,如果我们在清单中声明2个启动器活动,则将在设备应用程序菜单中创建2个应用程序图标。

因此,将有2个应用程序图标,单击第一个图标,将启动清单中的第一个声明的活动,而单击另一个第二个声明的活动将启动