Está en la página 1de 4

Integración estándar

Este primer método que se propone para integrar la forma de compartir contenido en las principales
redes sociales se basa en una filosofía muy sencilla: el usuario dispone, en su dispositivo, de las
aplicaciones de las principales redes sociales que utiliza. Por ello, es posible compartir información a
través de estas aplicaciones, y no desarrollando una pieza de software específica, que no sería más
que una versión limitada de lo que ya proporciona cada aplicación de red social.

La problemática es la siguiente: exponer la información a compartir, y dejar que el sistema y el usuario


seleccionen la mejor solución para compartir el contenido.

1. Con Android 2.x y 3.x


Los objetos que permiten compartir información en un dispositivo Android ya son conocidos y se han
estudiado en el capítulo Los fundamentos, sección Intención: se trata de las intenciones.

Recordemos que el funcionamiento de las intenciones es el siguiente: hay que crear una intención
especificando la acción que se desea ejecutar y, eventualmente, agregar datos adicionales.

Aquí, la acción que nos interesa es la acción AC TION_SEND: indica que la aplicación desea enviar
información. El destino del envío no se especifica, éste es el principio de funcionamiento de las
intenciones, sino que es el usuario quien, en tiempo de ejecución, entre las opciones capaces de
realizar la solicitud selecciona el modo de compartir el contenido.

El contenido que se quiere compartir en el marco de la acción seleccionada debe ser bien un texto o
bien un archivo enviado en formato binario.

En el primer caso (texto), el contenido se incluirá en el campo extra Intent.EXTRA_TEXT, y el tipo


MIME será te xt/plain.
En el segundo caso (archivo binario), se utilizará el campo extra Intent.EXTRA_STREAM, y el tipo
MIME dependerá del tipo de archivo binario (i mage/jpegen el caso de una imagen en formato
JPEG, por ejemplo, o de forma más genérica im age/*).
Es posible informar campos extra suplementarios, aunque sin estar seguros de si los tendrá en
cuenta cada
aplicación: EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_HTML_TEXTyEXTRA_SUBJECT.
Una vez creada la intención y asignados los datos "extra", únicamente queda iniciar la actividad que
incluirá el objeto Intent.
En el marco de una función diseñada para compartir contenido, la mejor solución consiste en
encapsular la llamada en un objeto de tipo C hooser (seleccionador), que presenta una interfaz
específica para la selección de la aplicación. El objeto Chooserno se utiliza directamente sino a
través del método I ntent.createChooser.
Sintaxis

Static Intent.createChooser(Intent destino, CharSequence titulo)

Ejemplo

Intent shareIntent=
new Intent(android.content.Intent.ACTION_SEND);

shareIntent.setType("text/plain");

shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Ejemplo compartir contenido");

shareIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"Texto del mensaje compartido");

startActivity(
Intent.createChooser(shareIntent, "Compartir en..."));

2. Con Android 4.x


Con la versión 14 (Android 4.0.1, Ice Cream Sandwich), la forma de compartir contenido en redes
sociales está, por lo general, integrada en la barra de acción.

Para integrar en esta barra de acción el icono específico para compartir contenido y las acciones
asociadas basta con agregar un ítem en el archivo XML del menú, configurándole un atributo de
tipo actionProviderClassespecífico.
El atributo ActionProviderClassse incluye con la API 14 y permite asociar una clase que se
encargará de gestionar la acción cuando se seleccione el elemento de menú.

La clase que se especifique en el atributo de tipo ActionProviderClassdebe heredar de la


clase abstracta ActionProvider.
El sistema Android provee, desde la API 14, un A ctionProvider específico para compartir
contenido en redes sociales: la clase ShareActionProvider(del paquete android.widget).
Es esta clase la encargada de crear los submenús que presentan una lista de redes sociales y los
métodos subyacentes.

Es preciso, por tanto, indicar estas clases como valor para el atributo actionProviderClassdel
ítem de menú.

A continuación se muestra un ejemplo de declaración de menú para mostrar un icono "compartir" en


la barra de acción. Este archivo de menú debe almacenarse en la carpeta /res/menudel proyecto.

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_compartir"
android:showAsAction="ifRoom"
android:title="Compartir"
android:actionProviderClass="android.widget.ShareActionProvider" />
</menu>

Para vincular el menú con su actividad es preciso, como se ha visto en el capítulo Completar la
interfaz de usuario, sección Menús, sobrecargar el método on CreateOptionMenu de la
clase Activity.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_compartir, menu);
[...]
}

A continuación, en el método onCreateOptionsMenu, hay que recuperar el ActionProviderdel


item de menú declarado en el archivo XML de menú y vincularle un objeto de
tipo ShareActionProvider. Para ello, la clase MenuItem dispone del
método ge tActionProvider, que devuelve el ActionProviderespecificado en el atributo.

ShareActionProvider shareActionProvider =
(ShareActionProvider) item.getActionProvider();

Sólo queda por definir, tal y como hemos visto anteriormente, una intención que asociaremos al
objeto de tipo Sh areActionProvider, invocando al método setShareIntent de la
clase ShareActionProvider.
Sintaxis

void setShareIntent (Intent shareIntent)

Ejemplo

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_cap10, menu);
MenuItem item = menu.findItem(R.id.menu_item_share);

ShareActionProvider shareActionProvider =
(ShareActionProvider) item.getActionProvider();

shareActionProvider.setShareIntent(createShareIntent());

return true;
}

private Intent createShareIntent() {


Intent shareIntent=
new Intent(android.content.Intent.ACTION_SEND);

shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Ejemplo compartir contenido");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"Texto del mensaje compartido");
return shareIntent;
}

Cuando se ejecute la actividad, el botón para compartir se agregará automáticamente en la zona


superior derecha de la barra de acción. Haciendo clic en el botón, se abrirá el menú "Compartir".

En resumen, este método de compartir contenido presenta numerosas ventajas:

Resulta muy sencillo de implementar.

No requiere ni claves ni API ni procesos de autenticación.


Utiliza únicamente elementos propios de la plataforma.

No existe el riesgo de depender de una API externa (del estilo de las API que proveen las
redes sociales), lo cual limita y reduce el mantenimiento.

Todas las redes sociales instaladas en el dispositivo del usuario, y únicamente estas redes,
se mostrarán y podrán seleccionarse.

No obstante, existen ciertas limitaciones que pueden resultar algo frustrantes: por un lado, el
mensaje que se envía es bastante sencillo y no tiene ningún formato, por otro lado, puede que las
aplicaciones de redes sociales no sean compatibles con la intención.

También podría gustarte