【问题标题】:android implicit intent to invoke app componentandroid隐式意图调用应用程序组件
【发布时间】:2014-05-13 03:07:51
【问题描述】:

我正在尝试测试如何使用隐式 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)。有人可以指出我做错了什么吗?

谢谢。

编辑:

我稍微修改了场景,无法解释我观察到的情况。我有两个应用程序:应用程序 1 和应用程序 2。

应用 1 有:

  • 活动 2:意图过滤器,带有操作“com.android.intenttest.testAction”和类别 DEFAULT
  • 活动 3:无意图过滤器

应用 2 有:

  • 活动 2:意图过滤器,带有操作“com.android.intenttest.testAction”和类别 DEFAULT

在 App 1 的 Activity 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。有人能解释一下为什么吗?

谢谢。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    对于问题的第一部分,意图过滤器需要如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多