android – 在PreferenceScreen中不同包的targetClass时,ActivityNotFoundException异常

应用程序的默认包是“example.app”。

目标活动的包是“example.app.abc”。

在java代码中调用“example.app.abc.TheActivity”的startActivity()只是工作,

但是在preferences.xml上指定它不起作用:

<PreferenceScreen android:key="key"
    android:title="@string/title"
>
    <intent android:action="android.intent.action.MAIN"
        android:targetPackage="example.app.abc"
        android:targetClass="TheActivity"
/>
</PreferenceScreen>

我试过android:targetClass =“example.app.abc.TheActivity”,但它也不行。

优先启动非默认包的活动是不可能的吗?

尝试使用库管理员帐户设置的图书馆项目中的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" />
翻译自:https://stackoverflow.com/questions/4360100/activitynotfoundexception-when-different-packages-targetclass-in-preferencescre

转载注明原文:android – 在PreferenceScreen中不同包的targetClass时,ActivityNotFoundException异常