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.
- Pid para el proceso que envió una intención
- Android - ¿Cómo abrir Google Maps con Intent y KML?
- Código desconocido del tipo de desconexión
- "Tomar una foto y presentarla" en modo retrato en Samsung Galaxy S
- BroadcastReceiver onReceive () no llamado cuando se registra dinámicamente
- Mi WearableListenerService no se inicia cuando se reinicia Android
- Android deep-linking. El intento no se restablece cuando se abre la aplicación desde el historial
- Android.Share a las redes sociales
- No se ha encontrado actividad para manejar Intención
- ¿Es seguro reutilizar una intención?
- Theme.NoDisplay crea un retraso de strage
- Synchronous startActivityForResult - Esperando que la actividad se complete
- ¿Por qué obtenemos estas intenciones "inválidas"?
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()
.