我正在尝试测试隐式intent如何用于在同一个应用程序中调用组件(我使用的是Android 4.4)。
我有一个MainActivity和一个Activity2。在AndroidManifest.xml中,
<activity
android:name="com.android.intenttest.Activity2"
android:label="@string/title_activity_activity2" >
<intent-filter>
<action android:name="com.android.intesttest.Activity2Action"/>
</intent-filter>
</activity>
在MainActivity中,我尝试使用:
Intent intentObj = new Intent();
intentObj.setAction("com.android.intesttest.Activity2Action");
if(intentObj.resolveActivity(getPackageManager()) != null){
startActivity(intentObj);
}
else{
Toast.makeText(getApplicationContext(), "No matching activity found", Toast.LENGTH_SHORT).show();
}
它无法调用Activity2(我可以看到Toast)。有人可以指出我做错了吗?
感谢。
修改:
我稍微修改了一下场景,无法解释我观察到的内容。我有两个应用程序:App 1和App 2.
App 1有:
App 2有:
在App 1的活动3中,我有:
Intent intentObj = new Intent();
intentObj.setAction("com.android.intesttest.testAction");
if(intentObj.resolveActivity(getPackageManager()) != null){
startActivity(intentObj);
}
else{
Toast.makeText(getApplicationContext(), "No matching activity found", Toast.LENGTH_SHORT).show();
}
我希望弹出一个选择器对话框,并要求在App 1的Activity2和App 2的Activity2之间进行选择。
但它始终显示App2中的Activity2。有人可以解释原因吗?
感谢。
答案 0 :(得分:0)
对于问题的第一部分,意图过滤器需要如下:
<activity
android:name="com.android.intenttest.Activity2"
android:label="@string/title_activity_activity2" >
<intent-filter>
<action android:name="com.android.intesttest.Activity2Action"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
来自Android的文档:
In order to receive implicit intents, you must include the CATEGORY_DEFAULT
category in the intent filter. The methods startActivity() and
startActivityForResult() treat all intents as if they declared the
CATEGORY_DEFAULT category. If you do not declare this category in your intent
filter, no implicit intents will resolve to your activity.