Android中的意图filter是什么?
在我的android应用程序中,我想从最初的活动“A”开始一个活动“B”。 我已经创build了这两个类。 但是,当使用以下代码启动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如何知道首先启动哪个活动? - 我无法理解意图filter。 任何人都可以请解释。
这是我的部分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>
当AndroidManifest.xml中有多个活动条目时,android如何知道首先启动哪个活动?
没有“第一”。 就你的情况而言,如你所示,你的发射器上会有两个图标。 无论用户点击的是哪一个被启动。
我无法理解意图filter。 任何人都可以请解释。
关于这个问题有相当多的文件 。 请考虑阅读,然后提出更具体的问题。
此外,当您遇到“应用程序意外停止,请重试”时,请在Eclipse中使用adb logcat
,DDMS或DDMS透视图来检查与该错误关联的Java堆栈跟踪。
intentfilter是应用程序清单文件中的一个expression式,用于指定组件希望接收的意图types。
当您创build一个隐含的意图时,Android系统通过将意图的内容与设备上其他应用程序的清单文件中声明的意图filter进行比较来find适当的组件。 如果意图匹配一个意图filter,则系统启动该组件并将它传递给意图对象。
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);
首先更改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方法启动此活动。
当您创build一个隐含的意图时,Android系统通过将意图的内容与设备上其他应用程序的清单文件中声明的意图filter进行比较来find适当的组件。 如果意图匹配一个意图filter,则系统启动该组件并将它传递给意图对象。 如果多个意向filter兼容,系统将显示一个对话框,以便用户可以select要使用的应用程序。
intentfilter是应用程序清单文件中的一个expression式,用于指定组件希望接收的意图types。 例如,通过为活动声明一个意图filter,您可以使其他应用程序以某种意图直接启动您的活动。 同样,如果您没有为活动声明任何意图filter,则只能以明确的意图启动它。
根据: 意图和意图filter
使用MAIN
和LAUNCHER
键保留第一个意图filter,并添加另一个作为ANY_NAME
和DEFAULT
。
您的LAUNCHER
将是活动A并且DEFAULT
将是您的活动B.
不能有两个Lancher AFAIK。 Logcat是一个有用的工具来debugging和检查后面的应用程序/机器状态。 从一个活动切换到另一个活动时将是自动的。
意图filter是指在您的应用程序清单中存在的指定组件要接收的意图types的expression式。 如果组件没有任何意图filter,它可以收到明确的意图。 如果具有filter的组件接收到隐式和显式意图
在应用程序打开时您必须午餐的活动在意向类别中提及它为“启动器”,剩余活动在“意图类别”中提及“默认”。
例如 : – 有2个活动A和B
活动A是LAUNCHER,所以在意图类别中将其设置为LAUNCHER,并将B作为Activity 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>
如果可能的话,试试这个即时解
Intent intent =new Intent(getApplicationBaseContext,second_Act.class); StartActivity(intent);