2012-09-04 16 views
22

De acuerdo con los documentos de Android, el nombre adicional de intención debe tener un prefijo de paquete. He estado utilizando los nombres adicionales de Intent sin prefijos durante mucho tiempo y parece que no hay posibilidad de colisión, ya que lo que realmente importa es que la acción Intención sea única. Entonces, ¿los documentos están equivocados o me estoy perdiendo algo?¿Por qué los documentos de Android dicen que los extras de intención necesitan el prefijo de paquete

la documentación para putExtra dicen:

Agregar datos extendidos a la intención. El nombre debe incluir un prefijo de paquete, por ejemplo, la aplicación com.android.contacts usará nombres como "com.android.contacts.ShowAll".

Respuesta

17

Creo que los documentos de Android recomiendan el uso de extras totalmente calificados para manejar un caso extremo poco común. El caso extremo es cuando estás:

  • Escribir una actividad que se puede iniciar mediante una acción pública Intención como Intent.ACTION_VIEW

Y

  • Para su propio uso que desee para poder pasar extras personalizados a la Actividad descrita anteriormente sin interferir con otra Actividad que está haciendo exactamente lo mismo y podría tener extras con el mismo nombre pero diferentes significados o formato

Phew, todo parece muy poco probable. Si no está manejando las acciones de intención públicas, parece que todavía no es necesario calificar completamente sus extras, pero supongo que no hace daño hacerlo todo el tiempo si usted es del tipo paranoide.

+1

¿No podría simplemente suministrar el paquete como un extra también? En casos como estos parece que sería mejor que primero compruebe su paquete de origen y luego maneje los Extras basados ​​en eso, a menos que algunas de sus Actividades de envío puedan agregar extras con los significados de otras Actividades de envío (lo que podría terminar siendo muy confuso, pero podría tener uso si está configurando algún tipo de actividad o servicio proxy que manipule los extras de las Intenciones que transfiere). – JAB

+0

Estoy de acuerdo con @JAB. ¿No sería el predeterminado que no está manejando los datos de intención "extra" de manera diferente según el solicitante, pero si hiciera eso, requeriría que se proporcione un nombre de paquete como un intento "extra" adicional? datos para que pueda distinguir fácilmente ** y ** validar? –

+0

Puede suministrar y requerir el nombre de su paquete como otro extra más y eso mantendría su aplicación segura, pero otras aplicaciones no verificarán ese extra no estándar. Por lo tanto, si usa una acción de intención pública y no califica completamente todos sus nombres adicionales no estándares, podría romper otras aplicaciones. – satur9nine

2

Las intrusiones se pueden transmitir a otras aplicaciones y al sistema en sí, así que cortesía es usar un espacio de nombres de paquete.

+5

No veo por qué sería cortés. ¿Por qué el sistema u otras aplicaciones buscarían mis extras, no deberían simplemente pasarlo a ciegas? En segundo lugar, la acción tiene el nombre del paquete, ¿por qué cada necesidad adicional lo necesita? – satur9nine

Cuestiones relacionadas