android隐式意图调用app组件

时间:2014-05-13 03:07:52

标签: android android-intent

我正在尝试测试隐式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有:

  • 活动2:使用操作'com.android.intenttest.testAction'和类别DEFAULT的意图过滤器
  • 活动3:没有意图过滤器

App 2有:

  • 活动2:使用操作'com.android.intenttest.testAction'和类别DEFAULT的意图过滤器

在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。有人可以解释原因吗?

感谢。

1 个答案:

答案 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.