Verificar conexión de red en aplicación Android.

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>

 

Obtener Hash Key de publicación para una aplicación Android.

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.

cmd

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.

ruta

3.- Ingresa la siguiente instrucción y presiona la tecla <Enter>:

keytool -list -v -keystore "Ruta del certificado"

rutaCertificado

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

ingresaPassword

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 :) 

hashKeyRelease

Deshabilitar las teclas Delete y Suprimir en un campo de entrada de texto HTML.

El siguiente código limita que las teclas Delete y Suprimir funcionen en un campo de entrada de texto HTML:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">	
	<title>Block Deletion</title>		
</head>
<body>
	<input type='text' id='txtTest' name='txtTest' class='BlockDeletion' value='Bórrame'/>
	<script src="../js/jquery-2.2.1.js"></script>
	
	<script>
		$(document).ready(function()
		{	
			$('.BlockDeletion').on('keydown', function (e)
			{
				try {                
					if ((e.keyCode == 8 || e.keyCode == 46))
						return false;
					else
						return true;               
				}
				catch (Exception)
				{
					return false;
				}
			});        
		});
	</script>
</body>
</html>

 

Obtener valor del Web.config con Javascript.

El siguiente fragmento de código encapsula en una variable JavaScript el valor de una AppSetting de un Web.config, permitiendo así que dicha variable pueda ser utilizada por cualquier componente o función (JavaScript o JQuery) de la página web.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">		
	<script>
		var _valor = '@System.Configuration.ConfigurationManager.AppSettings["appSettingKey"]';
	</script>	
</head>
<body>	
</body>
</html>

Limpiar filtros de tabla de JQuery.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
	<title>JQuery Data Table</title>	
	<link href="../css/bootstrap.min.css" rel="stylesheet" type="text/css">
	<link href="../css/foundation.min.css" rel="stylesheet" type="text/css">		
	<link href="../css/dataTables.foundation.min.css" rel="stylesheet" type="text/css">		
</head>
<body>
<div class="row">
	<div class="col-md-12">
	<br>
	<table id="tblEjemplo" class="display" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>        
        <tbody>
            <tr>
                <td>Tiger Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
            <tr>
                <td>Garrett Winters</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011/07/25</td>
                <td>$170,750</td>
            </tr>
            <tr>
                <td>Ashton Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009/01/12</td>
                <td>$86,000</td>
            </tr>
            <tr>
                <td>Cedric Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012/03/29</td>
                <td>$433,060</td>
            </tr>
            <tr>
                <td>Airi Satou</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>33</td>
                <td>2008/11/28</td>
                <td>$162,700</td>
            </tr>
            <tr>
                <td>Brielle Williamson</td>
                <td>Integration Specialist</td>
                <td>New York</td>
                <td>61</td>
                <td>2012/12/02</td>
                <td>$372,000</td>
            </tr>
            <tr>
                <td>Herrod Chandler</td>
                <td>Sales Assistant</td>
                <td>San Francisco</td>
                <td>59</td>
                <td>2012/08/06</td>
                <td>$137,500</td>
            </tr>
            <tr>
                <td>Rhona Davidson</td>
                <td>Integration Specialist</td>
                <td>Tokyo</td>
                <td>55</td>
                <td>2010/10/14</td>
                <td>$327,900</td>
            </tr>
            <tr>
                <td>Colleen Hurst</td>
                <td>Javascript Developer</td>
                <td>San Francisco</td>
                <td>39</td>
                <td>2009/09/15</td>
                <td>$205,500</td>
            </tr>
            <tr>
                <td>Sonya Frost</td>
                <td>Software Engineer</td>
                <td>Edinburgh</td>
                <td>23</td>
                <td>2008/12/13</td>
                <td>$103,600</td>
            </tr>
            <tr>
                <td>Jena Gaines</td>
                <td>Office Manager</td>
                <td>London</td>
                <td>30</td>
                <td>2008/12/19</td>
                <td>$90,560</td>
            </tr>
            <tr>
                <td>Quinn Flynn</td>
                <td>Support Lead</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2013/03/03</td>
                <td>$342,000</td>
            </tr>
            <tr>
                <td>Charde Marshall</td>
                <td>Regional Director</td>
                <td>San Francisco</td>
                <td>36</td>
                <td>2008/10/16</td>
                <td>$470,600</td>
            </tr>
            <tr>
                <td>Haley Kennedy</td>
                <td>Senior Marketing Designer</td>
                <td>London</td>
                <td>43</td>
                <td>2012/12/18</td>
                <td>$313,500</td>
            </tr>
            <tr>
                <td>Tatyana Fitzpatrick</td>
                <td>Regional Director</td>
                <td>London</td>
                <td>19</td>
                <td>2010/03/17</td>
                <td>$385,750</td>
            </tr>
            <tr>
                <td>Michael Silva</td>
                <td>Marketing Designer</td>
                <td>London</td>
                <td>66</td>
                <td>2012/11/27</td>
                <td>$198,500</td>
            </tr>
            <tr>
                <td>Paul Byrd</td>
                <td>Chief Financial Officer (CFO)</td>
                <td>New York</td>
                <td>64</td>
                <td>2010/06/09</td>
                <td>$725,000</td>
            </tr>
            <tr>
                <td>Gloria Little</td>
                <td>Systems Administrator</td>
                <td>New York</td>
                <td>59</td>
                <td>2009/04/10</td>
                <td>$237,500</td>
            </tr>
            <tr>
                <td>Bradley Greer</td>
                <td>Software Engineer</td>
                <td>London</td>
                <td>41</td>
                <td>2012/10/13</td>
                <td>$132,000</td>
            </tr>
            <tr>
                <td>Dai Rios</td>
                <td>Personnel Lead</td>
                <td>Edinburgh</td>
                <td>35</td>
                <td>2012/09/26</td>
                <td>$217,500</td>
            </tr>
            <tr>
                <td>Jenette Caldwell</td>
                <td>Development Lead</td>
                <td>New York</td>
                <td>30</td>
                <td>2011/09/03</td>
                <td>$345,000</td>
            </tr>
            <tr>
                <td>Yuri Berry</td>
                <td>Chief Marketing Officer (CMO)</td>
                <td>New York</td>
                <td>40</td>
                <td>2009/06/25</td>
                <td>$675,000</td>
            </tr>
            <tr>
                <td>Caesar Vance</td>
                <td>Pre-Sales Support</td>
                <td>New York</td>
                <td>21</td>
                <td>2011/12/12</td>
                <td>$106,450</td>
            </tr>
            <tr>
                <td>Doris Wilder</td>
                <td>Sales Assistant</td>
                <td>Sidney</td>
                <td>23</td>
                <td>2010/09/20</td>
                <td>$85,600</td>
            </tr>
            <tr>
                <td>Angelica Ramos</td>
                <td>Chief Executive Officer (CEO)</td>
                <td>London</td>
                <td>47</td>
                <td>2009/10/09</td>
                <td>$1,200,000</td>
            </tr>
            <tr>
                <td>Gavin Joyce</td>
                <td>Developer</td>
                <td>Edinburgh</td>
                <td>42</td>
                <td>2010/12/22</td>
                <td>$92,575</td>
            </tr>
            <tr>
                <td>Jennifer Chang</td>
                <td>Regional Director</td>
                <td>Singapore</td>
                <td>28</td>
                <td>2010/11/14</td>
                <td>$357,650</td>
            </tr>
            <tr>
                <td>Brenden Wagner</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>28</td>
                <td>2011/06/07</td>
                <td>$206,850</td>
            </tr>
            <tr>
                <td>Fiona Green</td>
                <td>Chief Operating Officer (COO)</td>
                <td>San Francisco</td>
                <td>48</td>
                <td>2010/03/11</td>
                <td>$850,000</td>
            </tr>
            <tr>
                <td>Shou Itou</td>
                <td>Regional Marketing</td>
                <td>Tokyo</td>
                <td>20</td>
                <td>2011/08/14</td>
                <td>$163,000</td>
            </tr>
            <tr>
                <td>Michelle House</td>
                <td>Integration Specialist</td>
                <td>Sidney</td>
                <td>37</td>
                <td>2011/06/02</td>
                <td>$95,400</td>
            </tr>
            <tr>
                <td>Suki Burks</td>
                <td>Developer</td>
                <td>London</td>
                <td>53</td>
                <td>2009/10/22</td>
                <td>$114,500</td>
            </tr>
            <tr>
                <td>Prescott Bartlett</td>
                <td>Technical Author</td>
                <td>London</td>
                <td>27</td>
                <td>2011/05/07</td>
                <td>$145,000</td>
            </tr>
            <tr>
                <td>Gavin Cortez</td>
                <td>Team Leader</td>
                <td>San Francisco</td>
                <td>22</td>
                <td>2008/10/26</td>
                <td>$235,500</td>
            </tr>
            <tr>
                <td>Martena Mccray</td>
                <td>Post-Sales support</td>
                <td>Edinburgh</td>
                <td>46</td>
                <td>2011/03/09</td>
                <td>$324,050</td>
            </tr>
            <tr>
                <td>Unity Butler</td>
                <td>Marketing Designer</td>
                <td>San Francisco</td>
                <td>47</td>
                <td>2009/12/09</td>
                <td>$85,675</td>
            </tr>
            <tr>
                <td>Howard Hatfield</td>
                <td>Office Manager</td>
                <td>San Francisco</td>
                <td>51</td>
                <td>2008/12/16</td>
                <td>$164,500</td>
            </tr>
            <tr>
                <td>Hope Fuentes</td>
                <td>Secretary</td>
                <td>San Francisco</td>
                <td>41</td>
                <td>2010/02/12</td>
                <td>$109,850</td>
            </tr>
            <tr>
                <td>Vivian Harrell</td>
                <td>Financial Controller</td>
                <td>San Francisco</td>
                <td>62</td>
                <td>2009/02/14</td>
                <td>$452,500</td>
            </tr>
            <tr>
                <td>Timothy Mooney</td>
                <td>Office Manager</td>
                <td>London</td>
                <td>37</td>
                <td>2008/12/11</td>
                <td>$136,200</td>
            </tr>
            <tr>
                <td>Jackson Bradshaw</td>
                <td>Director</td>
                <td>New York</td>
                <td>65</td>
                <td>2008/09/26</td>
                <td>$645,750</td>
            </tr>
            <tr>
                <td>Olivia Liang</td>
                <td>Support Engineer</td>
                <td>Singapore</td>
                <td>64</td>
                <td>2011/02/03</td>
                <td>$234,500</td>
            </tr>
            <tr>
                <td>Bruno Nash</td>
                <td>Software Engineer</td>
                <td>London</td>
                <td>38</td>
                <td>2011/05/03</td>
                <td>$163,500</td>
            </tr>
            <tr>
                <td>Sakura Yamamoto</td>
                <td>Support Engineer</td>
                <td>Tokyo</td>
                <td>37</td>
                <td>2009/08/19</td>
                <td>$139,575</td>
            </tr>
            <tr>
                <td>Thor Walton</td>
                <td>Developer</td>
                <td>New York</td>
                <td>61</td>
                <td>2013/08/11</td>
                <td>$98,540</td>
            </tr>
            <tr>
                <td>Finn Camacho</td>
                <td>Support Engineer</td>
                <td>San Francisco</td>
                <td>47</td>
                <td>2009/07/07</td>
                <td>$87,500</td>
            </tr>
            <tr>
                <td>Serge Baldwin</td>
                <td>Data Coordinator</td>
                <td>Singapore</td>
                <td>64</td>
                <td>2012/04/09</td>
                <td>$138,575</td>
            </tr>
            <tr>
                <td>Zenaida Frank</td>
                <td>Software Engineer</td>
                <td>New York</td>
                <td>63</td>
                <td>2010/01/04</td>
                <td>$125,250</td>
            </tr>
            <tr>
                <td>Zorita Serrano</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>56</td>
                <td>2012/06/01</td>
                <td>$115,000</td>
            </tr>
            <tr>
                <td>Jennifer Acosta</td>
                <td>Junior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>43</td>
                <td>2013/02/01</td>
                <td>$75,650</td>
            </tr>
            <tr>
                <td>Cara Stevens</td>
                <td>Sales Assistant</td>
                <td>New York</td>
                <td>46</td>
                <td>2011/12/06</td>
                <td>$145,600</td>
            </tr>
            <tr>
                <td>Hermione Butler</td>
                <td>Regional Director</td>
                <td>London</td>
                <td>47</td>
                <td>2011/03/21</td>
                <td>$356,250</td>
            </tr>
            <tr>
                <td>Lael Greer</td>
                <td>Systems Administrator</td>
                <td>London</td>
                <td>21</td>
                <td>2009/02/27</td>
                <td>$103,500</td>
            </tr>
            <tr>
                <td>Jonas Alexander</td>
                <td>Developer</td>
                <td>San Francisco</td>
                <td>30</td>
                <td>2010/07/14</td>
                <td>$86,500</td>
            </tr>
            <tr>
                <td>Shad Decker</td>
                <td>Regional Director</td>
                <td>Edinburgh</td>
                <td>51</td>
                <td>2008/11/13</td>
                <td>$183,000</td>
            </tr>
            <tr>
                <td>Michael Bruce</td>
                <td>Javascript Developer</td>
                <td>Singapore</td>
                <td>29</td>
                <td>2011/06/27</td>
                <td>$183,000</td>
            </tr>
            <tr>
                <td>Donna Snider</td>
                <td>Customer Support</td>
                <td>New York</td>
                <td>27</td>
                <td>2011/01/25</td>
                <td>$112,000</td>
            </tr>
        </tbody>
    </table>
	</div>
</div>	
<div class="row">
		<div class="col-md-12">
			<div style="text-align:right;">
				<button type="button" id="btnLimpiar" name="btnLimpiar" class="btn btn-danger">
					Limpiar filtros
				</button> 				
			</div>
			<br>
		</div>
</div>

	<script src="../js/jquery-2.2.1.js"></script>
	<script src="../js/jquery.dataTables.min.js"></script>
	<script src="../js/dataTables.foundation.min.js"></script>	
	<script>	
		$(document).ready(function() {	
					
			var _configuration = 
			{				
				"dom" : '<"top"lf<"toolbar">><"bottom"rtip>',
				"stateSave" : false,
				"language": 
				{
					"lengthMenu": " | _MENU_ Registros por página.",
					"zeroRecords": "No se encontraron resultados.",					
					"info": "Mostrando de _START_ a _END_ de un total de _TOTAL_ registros.",
					"infoEmpty": "No existen registros.",										
					"search": "Buscar:",
					"infoFiltered":"",
					"paginate": 
					{
						"first":      "Primero",
						"last":       "Último",
						"next":       "Siguiente",
						"previous":   "Anterior"
					}
				},	
				"lengthMenu" : [[10, 25, 50, -1], [10, 25, 50, "Todos"]],
				"pageLength" : 10
			};			
			
			$('#tblEjemplo').DataTable(_configuration);		
						
			$('div.dataTables_filter input').attr('placeholder', 'Escribe aquí...');			
			
			$('#tblEjemplo_length').addClass('pull-right');
			$('#tblEjemplo_filter').addClass('pull-right');			
			$('#tblEjemplo_paginate').addClass('pull-right');			
			
			$('#btnLimpiar').on('click', function()
			{				
				$('#tblEjemplo_filter').find('input[type=search]').val('');
				$("#tblEjemplo").DataTable().search('').draw();
			});	
		});		
	</script>	
</body>
</html>