Diferencia entre putExtra () y setData ()

¿Cuál es la diferencia entre putExtra () y setData ()? He leído los documentos Android, pero no es de mucha ayuda. También hay una pregunta anterior Intent.setData vs Intent.putExtra pero aún no está claro. Gracias por adelantado.

SetData ()

Establezca los datos en los que está funcionando esta intención. Este método borra automáticamente cualquier tipo que fue establecido previamente por setType (String) o setTypeAndNormalize (String).

Nota : la combinación de esquemas en el framework de Android es sensible a mayúsculas y minúsculas, a diferencia del RFC formal. Como resultado, siempre debe escribir su Uri con un esquema de minúsculas, o utilizar normalizeScheme () o setDataAndNormalize (Uri) para asegurarse de que el esquema se convierte en minúsculas.

Parámetros

Data: El Uri de los datos que esta intención está apuntando ahora.

Los intentos se utilizan para señalar al sistema Android que se ha producido un cierto evento. Los intentos a menudo describen la acción que debe llevarse a cabo y proporcionan datos sobre los cuales se debe realizar tal acción. Por ejemplo, su aplicación puede iniciarse a través de un intento de un componente de navegador para una determinada URL. Esto se demuestra con el siguiente ejemplo.

String url = "http://www.google.com"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 

Pero, ¿cómo identifica el sistema Android los componentes que pueden reaccionar ante una determinada intención?

Para ello se utiliza el concepto de filtro de intenciones. Un filtro de intenciones especifica los tipos de intentos a los que puede responder un receptor de actividad, servicio o difusión. Por lo tanto, declara las capacidades de un componente.

Los componentes de Android registran intencionalmente los filtros de forma estática en el AndroidManifest.xml o en el caso de un receptor de difusión también de forma dinámica mediante código. Un filtro de intenciones se define por su categoría, acción y filtros de datos. También puede contener metadatos adicionales.

Si se envía una intención al sistema Android, la plataforma Android ejecuta, utilizando los datos incluidos en el objeto Intent, una determinación de receptor. En esto determina los componentes que están registrados para los datos de la intención. Si varios componentes se han registrado para el mismo filtro de intención, el usuario puede decidir qué componente debe iniciarse.

PutExtra ()

Añada datos ampliados a la intención.

Parámetros :

Nombre: El nombre de los datos adicionales.

Valor: El valor de datos de la matriz String.

Devuelve el mismo objeto Intent, para encadenar múltiples llamadas en una sola sentencia.

putExtra permite añadir primitivas (o parcelable) pares clave-valor. setData se limita a pasar un Uri . setData se utiliza convencionalmente para el caso de solicitar datos de otra fuente, como en startActivityForResult.

Eche un vistazo a la fuente:

 /** * Set the data this intent is operating on. This method automatically * clears any type that was previously set by {@link #setType} or * {@link #setTypeAndNormalize}. * * <p><em>Note: scheme matching in the Android framework is * case-sensitive, unlike the formal RFC. As a result, * you should always write your Uri with a lower case scheme, * or use {@link Uri#normalizeScheme} or * {@link #setDataAndNormalize} * to ensure that the scheme is converted to lower case.</em> * * @param data The Uri of the data this intent is now targeting. * * @return Returns the same Intent object, for chaining multiple calls * into a single statement. * * @see #getData * @see #setDataAndNormalize * @see android.net.Uri#normalizeScheme() */ public Intent setData(Uri data) { mData = data; // private Uri mData mType = null; // private String mType; return this; } /** * Add extended data to the intent. The name must include a package * prefix, for example the app com.android.contacts would use names * like "com.android.contacts.ShowAll". * * @param name The name of the extra data, with package prefix. * @param value The String data value. * * @return Returns the same Intent object, for chaining multiple calls * into a single statement. * * @see #putExtras * @see #removeExtra * @see #getStringExtra(String) */ public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; } 

setData() es pasar datos sobre los cuales, se debe tomar acción; Mientras que putExtra() es enviar información adicional sobre la acción.

Por ejemplo, si uno está iniciando una actividad para realizar ACTION_CALL , entonces tiene que establecer el número a llamar en setData() . Y si quiere pasar cualquier otra información extra, entonces debe usar putExtra() .

  • ¿Cómo puedo abrir el calendario desde mi aplicación?
  • ¿Cómo recibo una URL de "Compartir" del navegador?
  • Longitud máxima del método PutExtra de Intención? (Cierre de la fuerza)
  • ¿Cómo usar un Android SearchView sin singleTop?
  • Actualizar la Galería después de eliminar un archivo de imagen?
  • Ocultar el icono de la aplicación y ejecutarlo
  • Android TV no está iniciando LAUNCH_LEANBACK Actividad
  • Matar una actividad de otra
  • ¿Cuál es el propósito de usar Intent.createChooser () en StartActivity () al enviar correo electrónico en Android
  • Obtenga la lista de aplicaciones capaces de manejar la intención SEND de mostrar en una vista (no un cuadro de diálogo emergente)
  • Android PendingIntent. El botón Atrás cierra la aplicación en lugar de restaurar la actividad anterior de la pila
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.