Android 中的意图过滤器是什么?

在我的 android 应用程序中,我想从最初的活动“ A”开始一个活动“ B”。我已经为这两个类创建了类。但是,当使用以下代码启动 B 时,会得到一个运行时错误: application has stopped unexpectedly, try again。这是我的代码:

Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent);

当我在 AndroidManifest.xml/manifest/application/activity/intent-filers中为活动 B 添加一个新条目时,应用程序就起作用了。

我有两个问题:

  • AndroidManifest.xml中有多个活动条目时,android 如何知道先启动哪个活动?
  • 我听不懂意图过滤器,有人能解释一下吗。

这是我的部分 AndroidManifest.xml

<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.LAUNCHER" />
</intent-filter>
</activity>
</application>
140026 次浏览

当有多个活动时 在 AndroidManifest.xml 中,如何 机器人知道哪些活动 先开始?

没有“第一”。在您的情况下,如所示,您的清单,您将有两个图标在您的启动程序。用户点击的那一个就是启动的那一个。

我无法理解意图过滤器。 谁能解释一下。

有相当多的 关于这个问题的文件。请考虑阅读,然后问更具体的问题。

此外,当您得到“应用程序意外停止,请再试一次”时,使用 Eclipse 中的 adb logcat、 DDMS 或 DDMS 透视图来检查与错误相关联的 Java 堆栈跟踪。

保持第一个意图过滤器与关键字 MAINLAUNCHER,并添加另一个作为 ANY_NAMEDEFAULT

你的 LAUNCHER将是活动 A 和 DEFAULT将是你的活动 B。

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

首先更改 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 方法启动此活动。

意图过滤器是应用程序清单文件中的一个表达式,它指定组件希望接收的意图类型。

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

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);

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

例如 :-有2个活动 A 和 B
活动 A 是 LAUNCHER,因此将其作为意图类别中的 LAUNCHER,活动 A 的 B 是子类别,因此将其作为 DEFAULT。

<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>

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

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

根据: 意图和意图过滤器

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

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

意图过滤器是在应用程序的清单中指定组件要接收的意图类型的表达式。 如果组件没有任何意图过滤器,它可以接收显式意图。 如果组件带有过滤器,则接收隐式和显式意图

当有多个活动被设置为 main 和 launcher,并且在清单中有一个意图过滤器时。然后第一个活动被认为是 Launcher 活动,android 启动或打开第一个活动。

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

上面的代码使一个应用程序图标在设备菜单中可用,所以如果我们在清单中声明2个启动器活动,将有2个应用程序图标被创建在设备应用程序菜单中。

因此,将有2个应用程序图标,点击第一个图标,第一声明的活动在清单将被启动,并点击另一个声明的活动将被启动