Je viens de rencontrer le même problème lorsque j'essaie d'utiliser un custom preference screen à partir d'un projet de bibliothèque pour les paramètres du compte AccountManager. Peu importe comment j'ai essayé de modifier les attributs targetPackage et targetClass, une exception serait levée (sauf, comme c'est un compte, cela bloque le téléphone).
Je pense que nous devrons supposer que c'est une limitation Android. Il est maladroit, mais tout ce que vous avez vraiment besoin de faire est de déclarer une classe wrapper pour l'activité au sein de l'espace de noms de votre application:
public class MyPreferences extends ActualPreferences {
}
Déclarez dans votre AndroidManifest.xml
<activity android:name=".MyPreferences"/>
Ensuite, vous pouvez spécifier la classe dans votre intention
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.MyPreferences" />
par ailleurs, la syntaxe est extrêmement difficile, au moins pour les préférences de compte. Toutes ces variations échouent:
<!-- 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"/>
Le facteur critique est apparemment que l'attribut android:targetPackage
correspond au package d'application. Si vous le souhaitez, vous pouvez placer l'activité dans un sous-package. Cela fonctionne:
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.settings.MyPreferences" />
Je ne sais pas s'il est possible de démarrer un paquet non par défaut. Whydont vous essayez à nouveau avec un "." devant la classe cible. comme android: targetClass = ". TheActivity" – Varun
Où voyez-vous la fonctionnalité "" imbriquée documentée? –
CommonsWare
Il ne doit pas être documenté, car il s'agit d'une API interne non prise en charge. L'application peut être rejetée en l'utilisant. – Pentium10