¿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.
- El atributo pathPrefix de Deeplink de Android se está omitiendo
- Cómo agregar o eliminar el filtro intención mediante programación en android?
- Actividad / aplicación iniciada desde NFC nunca aparece en la lista de aplicaciones recientes
- Pasar los datos de referencia a través de la intención de cromo de google play
- actividad de los padres con intenciones implícitas
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.
- Interceptar enlaces desde el navegador para abrir mi aplicación de Android
- Compartir texto + enlaces con intención
- Impedir que la actividad principal se inicie si ya se está ejecutando
- Uso de Monkey en una subactividad solamente (depuración de Android)
- Andorid Deeplinking no funciona con múltiples esquemas
- Android responde a la URL en intención
- Android: cómo obtener información de la ubicación de los extras del paquete de intenciones cuando se utiliza LocationManager.requestLocationUpdates ()
- Filtro de intención pathPrefix con '#' no funciona
Tuve el mismo problema hoy, y fui a buscar una respuesta en otra parte. Según Dianne Hackborne, lo que estamos tratando de hacer no está permitido. Al parecer, debe utilizar las cadenas literales en filtros de intención.