我试图使用AccountManager帐户设置的库项目中的custom preference screen时遇到了同样的问题。无论我如何调整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" />
我不知道它是否有可能启动一个非默认包。你不用你再试一次“。”在targetClass前面。像android:targetClass =“.Activity” – Varun 2010-12-05 18:00:31
你在哪里看到嵌套的``特征记录? –
CommonsWare
2010-12-05 18:32:21
它不应被记录,因为它是不受支持的内部API。该应用程序可能会被拒绝使用它。 – Pentium10 2010-12-05 20:03:11