Android >> Añadiendo feedback a tu aplicación Android

En esta ocasión vamos a ver como añadir un sistema de feedback en nuestra aplicación. El feedback permite a los usuarios ponerse en contacto con los desarrolladores de la aplicación y reportar posibles errores, sugerir nuevas funciones o dar simplemente su opinión sobre la aplicación. Crearemos una pestaña que podrás colocar en cualquier pantalla de tu aplicación, aunque lo recomendable es colocarla en la pantalla de inicio de tu aplicación, ya que de esta manera no interferirá con el contenido de la aplicación. Si lo deseas, podrás reutilizar el código y en vez de usar una pestaña podrás usar un botón o cualquier otro elemento para iniciar el proceso de feedback.

  • Configurando la aplicación

Para poder enviar feedback tendremos que comprobar que exista acceso a Internet en el dispositivo, para ello tendremos que incluir los permisos android.permission.INTERNET y android.permission.ACCESS_NETWORK_STATE necesarios en el fichero AndroidManifest.xml.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amatellanes.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    
    <!-- Allows applications to open network sockets. -->
    <uses-permission android:name="android.permission.INTERNET" />
    
    <!-- Allows applications to access information about networks -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name="com.amatellanes.android.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • Construyendo la pantalla

Al ser un ejemplo, únicamente vamos a definir en nuestro layout una botón donde el usuario podrá hacer clic para enviar el mensaje:

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/background_light"
    tools:context=".MainActivity" >

    <ImageButton
        android:id="@+id/ibFeedback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:background="@drawable/btn_feedback"
        android:clickable="true"
        android:contentDescription="Send feedback"
        android:onClick="onClick"
        android:src="@drawable/ic_feedback" />

</FrameLayout>

Como en el atributo android:background del botón hemos seleccionado un fichero con un estilo para que el color del botón cambie cuando se hace clic sobre él:

btn_feedback.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Pressed -->
    <item android:drawable="@android:color/darker_gray" android:state_pressed="true"/>

    <!-- Default -->
    <item android:drawable="@android:color/background_dark"/>

</selector>

La imagen seleccionado en el atributo android:src del botón la puedes descargar aquí. Ya tendremos listo nuestra pantalla y por lo tanto ya podemos empezar a definir nuestra actividad.

  • Definiendo la actividad

A grandes rasgos, lo único que tendremos que hacer en nuestra actividad será capturar el momento en el que se hace clic sobre el botón y lanzar un Intent que permita enviar el mensaje:

MainActivity.java


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public void onClick(View v) {

		switch (v.getId()) {

		case R.id.ibFeedback:

			// Call the method which will send a feedback.
			this.sendFeedback();

			break;

		default:
			break;
		}

	}

	/**
	 * Report an issue, suggest a feature, or send feedback.
	 */
	private void sendFeedback() {

		// Checks if the device is connected to the Internet.
		if (isDeviceConnected()) {

			// Set the action to be performed
			Intent sendIntent = new Intent();
			sendIntent.setAction(Intent.ACTION_SEND);

			// E-mail addresses that should be delivered to.
			sendIntent.putExtra(Intent.EXTRA_EMAIL,
					new String[] { "feedback@your-company.com" });

			// Set the subject line of a message
			sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Send app feedback");

			// Set the data type of the message
			sendIntent.setType("plain/text");
			startActivity(Intent.createChooser(sendIntent,
					"Report an issue, suggest a feature, or send feedback"));

		} else

			Toast.makeText(getApplicationContext(),
					"Your device is not connected to the Internet",
					Toast.LENGTH_LONG).show();
	}

}

Vemos que todo lo relacionado con el envío del mensaje se lleva a cabo en la función sendFeedback(). En dicha función, lo primero que se realiza es la comprobación de la conexión a Internet, para ello se invoca a la función isDeviceConnected() que definimos a continuación:

package com.amatellanes.android;
package com.amatellanes.android;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener {

	/**
	 * Checks if the device is connected to the Internet.
	 * 
	 * @param context
	 *            application context
	 * @return if the device is connected true, otherwise false.
	 */
	private boolean isDeviceConnected() {

		final ConnectivityManager connectManager = (ConnectivityManager) getApplicationContext()
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		return (connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
				.getState() == NetworkInfo.State.CONNECTED || connectManager
				.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED);
	}

}

Si existe una conexión pasamos al siguiente paso, que consiste en primer lugar en crear un Intent cuya acción será la de enviar un mensaje (Intent.ACTION_SEND). A continuación definimos una serie de parámetros en el Intent que acabamos de crear:

  • EXTRA_EMAIL: Seleccionamos la lista de direcciones que van a recibir el mensaje enviado por el usuario.
  • EXTRA_SUBJECT: Seleccionamos el asunto del mensaje.
  • setType: Seleccionamos el tipo de datos que se van a enviar en el mensaje.

Ya tendremos implementado un sistema de feedback en nuestra aplicación.

Más información | Sending Content to Other Apps

Descargar código | Github

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: