A continuación te comparto un proyecto que contiene la implementación de un Spinner Android que consume un Web Service y muestra en cada uno de sus elementos un icono con su respectiva descripción.



Apk
appSpinner.apk (523,79 kb)
Proyecto Completo (Android Studio)
AppSpinner.rar (19,15 mb)
A continuación te comparto una plantilla de diseño apegada a las buenas prácticas de Google, la cual te permitirá crear aplicaciones móviles para dispositivos Android con un alto nivel de diseño, usabilidad y experiencia de usuario.






Apk de Ejemplo
universal_demo.apk (6,29 mb)
Proyecto completo
Navigation Drawer Universal.rar (16,49 mb)
El siguiente código te permitirá verificar la conectividad a red de una aplicación Android.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="critza.apps.conectividad.MainActivity">
<Button
android:id="@+id/btnValidaConectividad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verifica Conectividad"
android:layout_gravity="center"
android:onClick="btnValidaConectividad_onClick"/>
</LinearLayout>
MainActivity.java
//region Paquete.
package critza.apps.conectividad;
//endregion
//region Bibliotecas de clases.
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
//endregion
public class MainActivity extends AppCompatActivity {
//region Método encargado de crear la actividad.
/**
* Método encargado de crear la actividad.
* @param savedInstanceState Instancia de estado.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//endregion
//region Controlador de evento Click del Button [btnValidaConectividad].
/**
* Controlador de evento Click del Button [btnValidaConectividad].
* @param objectSender Button btnValidaConectividad.
*/
public void btnValidaConectividad_onClick(View objectSender)
{
try
{
if(VerificaConectividad())
Toast.makeText(this, "Conexión exitosa.",Toast.LENGTH_LONG).show();
else
Toast.makeText(this,"Valida tu conexión WIFI o Red de Datos y vuelve a intentarlo.", Toast.LENGTH_LONG).show();
}
catch (Exception ex)
{
Toast.makeText(this,ex.getMessage(),Toast.LENGTH_LONG).show();
}
}
//endregion
//region Método para validar la conectividad a la red.
/**
* Método para validar la conectividad a la red.
* @return Estado de la conexión.
*/
private boolean VerificaConectividad()
{
boolean _resultado = false;
try {
NetworkInfo _informacionRed = (((ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE))).getActiveNetworkInfo();
boolean _es3g = _informacionRed.getType() == ConnectivityManager.TYPE_MOBILE;
boolean _esWiFi = _informacionRed.getType() == ConnectivityManager.TYPE_WIFI;
boolean _conexionEstablecida = _informacionRed.isConnectedOrConnecting();
_resultado = ((_es3g || _esWiFi) && _conexionEstablecida) ? true : false;
} catch (Exception ex) {
throw ex;
} finally {
return _resultado;
}
}
//endregion
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="critza.apps.conectividad" android:installLocation="auto">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Para poder realizar la publicación de una aplicación Android siempre será necesario saber cuál es el Hash Key de nuestra aplicación recién firmada, ya que generalmente una aplicación Android hace uso de API´s, las cuales durante el periodo de desarrollo hacen uso de un Hash Key de Depuración, pero dicho Hash se vuelve inservible después de firmar la aplicación con un certificado, ya que el apk generado estará representado por un nuevo Hash, el cual es conocido como Hash Key de Release.
Dicho lo anterior, esto representa un punto crítico para la publicación de una aplicación, debido a que si la configuración de las API´s no es actualizada haciendo referencia al Hash Key de Release de la aplicación, esta no podrá consumir la funcionalidad brindada por las API´s.
Pero no te preocupes, generar el Hash es fácil, siempre y cuando tengas a la mano tu certificado con el cual firmaste tu aplicación (archivo con extensión .jks) y la firma del mismo.
Si cuentas con los requisitos antes mencionados, solo será necesario que realices los siguientes pasos:
1.- Accede a tu Símbolo de Sistema como administrador.

2.- Accede a la siguiente ruta de tu sistema:
C:\Program Files\Java\jdk1.8.0_121\bin>
Cabe mencionar que la ruta puede cambiar en cuestión de la versión del JDK que tengas instalada.

3.- Ingresa la siguiente instrucción y presiona la tecla <Enter>:
keytool -list -v -keystore "Ruta del certificado"

4.- Después de realizar la acción anterior, la consola te solicitara que ingreses el password del certificado, el cual deberás de proporcionar y al terminar de escribirlo tendrás que presionar la tecla <Enter>.

5.- En la consola se te presentara la información de tu certificado incluyendo las huellas digitales del mismo, por lo que deberás de tomar el hash que aparece en el apartado SHA1, el cual representa el Hash Key de Release de tu aplicación :)
