Acabo de encontrarme con el mismo problema cuando trato de usar un custom preference screen desde un proyecto de biblioteca para la configuración de la cuenta de AccountManager. No importa cómo intenté ajustar los atributos targetPackage y targetClass, arrojaría una excepción (excepto que, como es una cuenta, bloquea el teléfono).
Creo que tendremos que asumir que se trata de una limitación de Android. Es torpe, pero lo único que hay que hacer es declarar una clase contenedora para la actividad dentro del espacio de nombres de la aplicación:
public class MyPreferences extends ActualPreferences {
}
declararlo en su AndroidManifest.xml
<activity android:name=".MyPreferences"/>
continuación, puede especificar la clase en su intento
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.MyPreferences" />
por cierto, la sintaxis es muy exigente, al menos para las preferencias de la cuenta. Todas estas variaciones fallan:
<!-- 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"/>
El factor crítico es aparentemente que el atributo android:targetPackage
coincide con el paquete de la aplicación. Si lo desea, puede colocar la actividad en un subpaquete. Esto funciona:
<intent android:targetPackage="com.my.package"
android:targetClass="com.my.package.settings.MyPreferences" />
No sé si es posible iniciar un paquete no predeterminado. ¿Por qué no intentarlo de nuevo con un "." frente a la Clase objetivo. como android: targetClass = ". TheActivity" – Varun
¿Dónde se ve la función anidada '' documentada? –
CommonsWare
No debe documentarse, ya que es una API interna no compatible. La aplicación puede ser rechazada al usarla. – Pentium10