Action Intent在启动另一个活动时导致ActivityNotFoundException

时间:2013-04-08 08:38:53

标签: android android-intent android-2.2-froyo

启动活动的My TestApp具有以下代码:

public void startOperaView() {
        Intent browserIntent = new Intent("org.droidtv.nettvbrowser.VIEW");
        Uri luri = Uri.parse("connectedplanet.tv/olvs/test");

        //browserIntent.setClass(getApplicationContext(), Browser.class);
        //browserIntent.setAction("org.droidtv.nettvbrowser.VIEW");
        browserIntent.setType("application/vnd.droidtv.sta");
        browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        browserIntent.setData(luri);

        startActivity(browserIntent);
    }

包“org.droidtv.nettvbrowser”包含以下AndroidManifest.xml文件:

<activity
            android:name="org.droidtv.nettvbrowser.Browser"
            android:configChanges="locale"
            android:label="@string/app_name" >
            <intent-filter>
             <action android:name="org.droidtv.nettvbrowser.VIEW" />
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
             <category android:name="android.intent.category.DEFAULT" />
             <data android:mimeType="application/vnd.droidtv.sta" />

            </intent-filter>
        </activity>

奇怪的是,如果我在意图中指定实际的包名称它似乎工作正常,只有动作意图抛出这些错误。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

请参阅http://developer.android.com/guide/topics/manifest/activity-element.html,您可以尝试设置android:exported="true"

android:exported

活动是否可以由其他应用程序的组件启动 - 如果可以,则为“true”,否则为“false”。如果为“false”,则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动。 默认值取决于活动是否包含意图过滤器。缺少任何过滤器意味着只能通过指定其确切的类名来调用活动。这意味着该活动仅供应用程序内部使用(因为其他人不知道类名)。所以在这种情况下,默认值为“false”。另一方面,至少有一个过滤器的存在意味着该活动是供外部使用的,因此默认值为“true”。

此属性不是限制活动与其他应用程序相关的唯一方法。您还可以使用权限来限制可以调用活动的外部实体(请参阅权限属性)。

或者您可以参考类似的内容:

<activity android:name="OutgoingCallBroadcaster"
        android:theme="@android:style/Theme.NoDisplay"
        android:permission="android.permission.CALL_PHONE"
        android:configChanges="orientation|screenSize|keyboardHidden">
    <!-- CALL action intent filters, for the various ways
         of initiating an outgoing call. -->
    <intent-filter>
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="tel" />
    </intent-filter>
    <intent-filter android:icon="@drawable/ic_launcher_sip_call">
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="sip" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="voicemail" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/phone" />
        <data android:mimeType="vnd.android.cursor.item/phone_v2" />
        <data android:mimeType="vnd.android.cursor.item/person" />
    </intent-filter>
</activity>