当我设置<category android:name =“android.intent.category.PREFERENCE”> </category>时,Intent不起作用

时间:2013-05-31 07:20:46

标签: android

我使用以下代码打开一个新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>

1 个答案:

答案 0 :(得分:0)

那是因为你没有在你的意图中添加CATEGORY_PREFERENCE,引自docs

  

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

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

Intent intent = new Intent("com.hellocw.exportmsg.mysettings");
intent.addCategory(Intent.CATEGORY_PREFERENCE);
startActivity(intent);