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