¿Cómo puedo especificar la parte esquema específico en una etiqueta de datos para un filtro intención?

StackOverflow https://stackoverflow.com/questions/2193716

Pregunta

Quiero establecer un BroadcastReceiver para manejar PACKAGE_REPLACED, pero sólo quiere ser notificado cuando se sustituye mi paquete. Funciona bien si puedo especificar una etiqueta de datos con el esquema = "paquete", pero luego me notifican cuando cualquier aplicación se vuelve a instalar o actualizar. No puedo imaginar cómo se supone que debo especificar el nombre del paquete que está en la parte esquema específico - es decir, cuando mi BroadcastReceiver obtiene la intención de onRecieve (), si lo hago intent.getData () getSchemeSpecificPart (. ), que es el nombre del paquete, pero ¿hay alguna manera de que pueda filtrar por sólo que en mi intención de filtro?

¿Fue útil?

Solución

Más fácil sería aceptar cualquier intentos de transmisión con el esquema package como usted dice, pero hacer el filtrado basado en los extras Intent que se envían con las acciones PACKAGE_*.

Si el nombre del paquete en el Intent no coincide con la suya, simplemente lo ignoran.

Otros consejos

Tal como se utiliza en la aplicación Búsqueda de Google:

<intent-filter>
  <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
  <data android:scheme="package" android:path="com.google.android.googlequicksearchbox" /> 
</intent-filter>

Sin embargo, según mi prueba áspera, esto todavía puede coger cualquier paquete actualizado, lo que hace que el.: Parte "androide ruta" en realidad inútil

Para Android 3.1 +, puede utilizar esta nueva acción para responder sólo cuando el paquete de actualización:

<intent-filter>
  <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
</intent-filter>

Si usted tiene que apoyar de nuevo a Android 2.x, una mejor práctica es declarar 2 receptores separados para PACKAGE_REPLACED y MY_PACKAGE_REPLACED. A continuación, durante la primera ejecución, compruebe la versión de tiempo de ejecución de Android y desactivar la anterior si la versión es 3.1 +.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top