Ответ 1
Я столкнулся с той же проблемой при попытке использовать экран пользовательских настроек из проекта библиотеки для настроек учетной записи 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" />