0

我使用以下代码打开一个新的 UI:

String name="com.hellocw.exportmsg.mysettings";
Intent intent1 = new Intent(name);
startActivity(intent1);

它在案例二中运行良好,但在案例一中失败了。为什么?谢谢!

案例一

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>  

    <activity android:name=".MainPreferenceActivity"
              android:label="Settings">
        <intent-filter>
            <action android:name="com.hellocw.exportmsg.mysettings" />
            <category android:name="android.intent.category.PREFERENCE" />
        </intent-filter>
    </activity>

案例二

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>  

    <activity android:name=".MainPreferenceActivity"
              android:label="Settings">
        <intent-filter>
            <action android:name="com.hellocw.exportmsg.mysettings" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
4

1 回答 1

0

那是因为您没有添加CATEGORY_PREFERENCEIntent,引用文档

类别(如果提供)必须全部由活动作为其处理的类别列出。也就是说,如果您包括类别 CATEGORY_LAUNCHER 和 CATEGORY_ALTERNATIVE,那么您将仅解析具有列出这两个类别的意图的组件。活动通常需要支持 CATEGORY_DEFAULT 以便它们可以被 Context.startActivity() 找到。

因此,为了解决您的活动,CATEGORY_PREFERENCE您必须明确列出它。例如,

Intent intent = new Intent("com.hellocw.exportmsg.mysettings");
intent.addCategory(Intent.CATEGORY_PREFERENCE);
startActivity(intent); 
于 2013-05-31T07:44:06.033 回答