Android:让一个apk启动另一个

时间:2013-12-05 22:25:31

标签: android android-intent intentfilter

我有两个应用程序,每个应用程序都有一个活动,第一个按下按钮时执行此操作:

final private static String START_APP_INTENT = "com.example.app1.START_APP2";
Intent intent = new Intent(START_APP_INTENT);
        startActivity(intent);

第二个应用程序的android清单文件中包含以下内容:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.app2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="com.example.app1.START_APP2" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

当我按下按钮时,我得到以下异常:

Caused by: android.content.ActivityNatFoundException: No Activity found to handle Intent { act=com.example.app1.START_APP2 }

我的app2有意图过滤器。为什么我得到这个例外?

1 个答案:

答案 0 :(得分:1)

您的<intent-filter>不正确。你有这个:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="com.example.app1.START_APP2" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

你需要这个:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.example.app1.START_APP2" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

第一个过滤器是为了让您的应用程序显示在可用应用程序列表中。第二个过滤器供其他应用程序使用。当应用程序调用{​​{1}}并且startActivity()中未指定显式组件时,Android会自动将DEFAULT类别添加到Intent。由于您在Intent中没有获得DEFAULT类别,因此它不匹配,Android无法找到合适的活动来启动。