问题描述
在我的 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
有多个 Activity 条目时,android 如何知道首先启动哪个 Activity? - 我无法理解意图过滤器。 任何人都可以请解释。
这是我的部分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>
1楼
Intent 过滤器是应用程序清单文件中的一个表达式,用于指定组件希望接收的 Intent 类型。
当您创建一个隐式 Intent 时,Android 系统会通过将 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);
2楼
当AndroidManifest.xml中有多个activity条目时,android如何知道哪个activity先启动?
没有“第一”。 在你的情况下,你的清单如图所示,你的启动器中有两个图标。 用户点击哪一个就是启动的那个。
我无法理解意图过滤器。 任何人都可以请解释。
有很多的。 请考虑阅读该内容,然后提出更具体的问题。
此外,当您收到“应用程序意外停止,再试一次”时,请使用adb logcat
、DDMS 或 Eclipse 中的 DDMS 透视图检查与错误关联的 Java 堆栈跟踪。
3楼
当您创建一个隐式 Intent 时,Android 系统会通过将 Intent 的内容与设备上其他应用程序的清单文件中声明的 Intent 过滤器进行比较来找到合适的组件来启动。 如果意图与意图过滤器匹配,则系统启动该组件并将其传递给意图对象。 如果多个意图过滤器兼容,系统会显示一个对话框,以便用户可以选择要使用的应用程序。
Intent 过滤器是应用程序清单文件中的一个表达式,用于指定组件希望接收的 Intent 类型。 例如,通过为 Activity 声明一个 Intent 过滤器,您可以让其他应用程序直接使用某种 Intent 启动您的 Activity。 同样,如果您没有为活动声明任何意图过滤器,则它只能以显式意图启动。
根据:
4楼
首先更改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 方法启动此活动。
5楼
如果您的应用程序打开,您希望它成为第一个屏幕的Activity
,然后在意图类别中将其作为 LAUNCHER 提及,其余活动在意图类别中提及默认。
例如:- 有 2 个活动 A 和 B
活动 A 是 LAUNCHER,因此将其设置为意图类别中的 LAUNCHER,而 B 是活动 A 的子项,因此将其设置为 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>
6楼
意图过滤器是出现在您的应用程序清单中的表达式,用于指定组件要接收的意图类型。 如果组件没有任何意图过滤器,它可以接收明确的意图。 如果组件带有过滤器,则同时接收隐式和显式意图
7楼
不可能有两个 Lancher AFAIK。 Logcat 是一个有用的工具,用于在后台调试和检查应用程序/机器状态。 从一项活动切换到另一项活动时,它将是自动的。
8楼
使用键MAIN
和LAUNCHER
保留第一个意图过滤器,并添加另一个作为ANY_NAME
和DEFAULT
。
您的LAUNCHER
将是活动 A,而DEFAULT
将是您的活动 B。
9楼
如果可能,请尝试这个即时解决方案:
Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);
10楼
当有多个活动设置为 main 和启动器时,清单中有一个意图过滤器。 然后第一个活动被视为启动器活动,并且android启动或打开第一个活动。
<category android:name="android.intent.category.LAUNCHER" />
上面的代码使设备菜单中的应用程序图标可用,因此如果我们在清单中声明 2 个启动器活动,将在设备应用程序菜单中创建 2 个应用程序图标。
所以会有 2 个应用程序图标,点击第一个图标,清单中第一个声明的活动将被启动,然后点击另一个第二个声明的活动被启动