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() .

  • Pasar valores a través de un paquete y obtener su valor en otra actividad
  • Cómo crear un widget de pantalla de bloqueo personalizado (sólo quiero mostrar un botón)
  • resultcode y datos null in onActivityresult
  • Si se detiene una actividad, se vuelve a crear lo que se pasa en getIntent ()
  • actualizar mi aplicación
  • Código desconocido del tipo de desconexión
  • Enviar un intento al navegador para abrir URL específica
  • Android startActivityForResult devuelve null a onActivityResult cuando se utiliza la cámara
  • Resultado de la intención, ¿cómo saber quién lo envió?
  • Enviando ACTION_CALL Propósito en Android que contiene hash # signo
  • Android devuelve datos a la actividad anterior
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.