¿No deberían las referencias de cadena trabajar para los nombres de acciones de un filtro de intenciones en el AndroidManifest?

Originalmente mi AndroidManifest.xml contenía una actividad a la que accedí a través de su nombre de acción personalizada.

<activity android:label="HERE I AM" android:name="TestController"> <intent-filter> <action android:name="com.company.project.TestActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Con este manifiesto startActivity(new Intent("com.company.project.TestActivity")); Comenzó mi actividad sin ningún problema.

Pero yo no estaba satisfecho con este estilo de codificación. Earlyer I was severeal veces dijo que no utilice en línea las constantes de cadena definida, ya que wolud conducir a menos código de mantenimiento. Y realmente es un punto.

Así que primero declaré ublic static final String MY_ACTION = "com.company.project.TestActivity"; En mi clase App.java (la que usé para) y llegué a mi componente a través de este nombre constante de esta manera:

startActivity(new Intent(App.MY_ACTION));

Esto parecía mucho mejor, pero todavía tenía que mantener dos instancias de la misma cadena. En http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name a read

… Esto también puede ser una referencia a un recurso (en la forma "@ [package:] type: name") o un atributo theme (en la forma "? [Package:] [type:] name") que contiene un valor De este tipo.

Así que supongo que estaría bien tener esta cadena definida sólo una vez. Puse <string name="MY_ACTION">com.company.project.TestActivity</string> en mi strings.xml y modifiqué mi aplicación:

 public class App ... public static String MY_ACTION; @Override public void onCreate() { super.onCreate(); MY_ACTION = getString(R.string.MY_ACTION); ... 

Y todo seguía bien

… hasta que cambié mi AndroidManifest.xml para usar <action android:name="@string/MY_ACTION" /> lugar de <action android:name="com.company.project.TestActivity" /> . Después de este cambio a mi mayor sorpresa la aplicación se rompió en tiempo de ejecución quejándose de no encontrar la actividad para mi intención. La referencia de cadena probablemente no se analizó correctamente. 🙁

Tal vez el problema es que R.string es dependiente de configuración …? Pero bueno, no puedo ser tan loco para elegir una referencia de cadena, cuyo valor puede cambiar de config a config! Y developer.android.com me dijo que está bien usar referencias en los nombres de acción! He experimentado este comportamiento en los niveles API 6, 7, final 8. ¿Es sólo un simple error en el sistema Android? ¿O entiendo mal algo?

Estoy totalmente desconcertado, por favor, ayúdame. Gracias por adelantado.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.