我在尝试使用库项目中的自定义首选项屏幕进行 AccountManager 帐户设置时遇到了同样的问题。无论我如何尝试调整 targetPackage 和 targetClass 属性,它都会引发异常(除了,因为它是一个帐户,它会使手机崩溃)。
我认为我们只需要假设这是 Android 的限制。这很笨拙,但您真正需要做的就是在应用程序的命名空间中为活动声明一个包装类:
public class MyPreferences extends ActualPreferences {
}
在你的 AndroidManifest.xml 中声明它
<activity android:name=".MyPreferences"/>
然后你可以在你的意图中指定类
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.MyPreferences" />
顺便说一句,语法非常繁琐,至少对于帐户偏好而言。所有这些变化都失败了:
<!-- fails --> <intent android:targetClass="com.my.package.MyPreferences" />
<!-- fails --> <intent android:targetClass="MyPreferences"
android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass=".MyPreferences"
android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass="settings.MyPreferences"
android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass=".settings.MyPreferences"
android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass="com.my.other.package.MyPreferences"
android:targetPackage="com.my.package"/>
关键因素显然是该android:targetPackage
属性与应用程序包匹配。如果需要,可以将活动放在子包中。这有效:
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.settings.MyPreferences" />