Prendiendo Los que seguís esta sección, puede que recordéis haber leído en alguna ocasión que estaría basada en códigos y también en esos llamados “Snippets“. Estos “Snippets” son, intentando hacer una traducción literal, “trozos de” o “fragmentos de”, pequeñas partes de un código que pueden cumplir una función concreta y por lo general muy útil dentro de una aplicación.
Desde hace bastante tiempo a esta parte he estado basando las entregas de “Aprendiendo Android” en las cosas que mas demanda iban teniendo por vuestra parte, según lo que fuerais solicitando, lo que ocurre es que hay elementos por los que preguntáis que por si solos no dan para una entrega completa, de modos que en esta ocasión he reunido diversos temas concretos, llamémosle “Snippets” por los que habéis preguntado e intentaré que queden lo más claro posible:
Trucos o Snippets, pequeños pero útiles
…Y como por algún sitio hay que empezar, empezaremos por un sencillo código que nos va a permitir…
Escribir un fichero txt en la tarjeta SDde nuestro terminal.
Como siempre se comenta en esta sección, al explicar la base, la utilidad de esta queda siempre a la imaginación del desarrollador. Un fichero txt puede contener información del tipo que nosotros queramos, leída de algún otro fichero, de una propia aplicación o, como vamos a ver en este ejemplo, generada por nosotros mismos.
Como viene siendo constumbre, en primero lugar os pongo el código completo y lo vamos analizando:
//
import java.io.File;import java.io.FileWriter;
import java.io.IOException;
import android.app.Activity;import android.os.Bundle;
import android.os.Environment;
publicclass elAndroideLibre extends Activity {
privatestaticvoid grabarTxt(String nuestroArchivo){
try
{
File ruta = Environment.getExternalStorageDirectory();
File gpxfile = new File(ruta, nuestroArchivo);
FileWriter escibir= new FileWriter(gpxfile);
// El textoseescribeporcadalinea
escibir.append(«Hola»);escibir.append(‘\n’); escibir.append(«Estoy escribiendo un fichero en la SD»);
escibir.append(‘\n’); escibir.append(«Aprendiendo Android XI»);
escibir.flush(); escibir.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main);
grabarTxt(«ElAndoideLibre.txt»);
}
}
//
Muy bien, como se puede apreciar es un código muy sencillo, al ejecutarse el onCreate directamente estamos llamando al método “grabaTxt”, este crea una ruta que va a ser la el almacenamiento externo (getExternalStorageDirectory())
Una vez creada esa ruta, le vamos a indicar que en esa ruta vamos a poner el archivo que creamos, que en nuestro caso es una String llamada “nuestroArchivo”
File gpxfile = new File(ruta, nuestroArchivo);
Y ahora con FileWriter, al que llamaremos “escribir”, pus simplemente vamos a escribir lo que queramos que ponga en nuestro txt. Tengamos en cuenta que la escritura se hace por lineas por lo que vamos a usar, como siempre “\n” para tabular a la siguiente línea.
Nuestro objetivo es que en nuestro txt ponga concretamente esto:
“Hola
Estoy escribiendo en la SD
Aprendiendo Android XI”
Por lo que después de cada línea, y como comentábamos, vamos a tabular a la siguiente
//
escibir.append(«Hola»);
escibir.append(‘\n’);
escibir.append(«Estoy escribiendo un fichero en la SD»);
escibir.append(‘\n’);
escibir.append(«Aprendiendo Android XI»);
//
Cerramos la escritura tal como se ve a continuación en el código y …listo! Como siempre, debemos tener en cuenta los PERMISOS, en este caso y como suena bastante evidente, android nos va a solicitar el permiso de escritura externa:
//
<uses-permission android:name=»android.permission.WRITE_EXTERNAL_STORAGE»></uses-permission>
//
Si ejecutamos la aplicación y nos vamos a nuestra SD, al directorio raíz, veremos que ya tenemos nuestro txt con el texto que hemos querido. Pues vamos a por nuestro segundo Snippets, este es más sencillo aun :) ya que de lo que nos vamos a encargar es de
Detectar la orientación de inicio de la pantalla mediante código
Alguno puede preguntarse de la utilidad de esta acción ya que android detecta de forma automática la orientación de la pantalla e incluso puede aplicar un entorno gráfico u otro dependiendo de esta, cierto, pero por ejemplo con estas líneas podremos incluir un mensaje concreto si el usuario inicia la aplicación con la pantalla de fora horizontal, o ejecutar determinado método si la aplicación comienza de forma vertical, etc… Volvemos a la base de todo, la imaginación.
Bien, pues aquí tenemos el código completo:
//
import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
public class elAndroideLibre extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) { ///////////////////////////// El Main (Click en imagenes y Click en boton accion)
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
// Get the orientation
int orientacionDeLaPantalla = display.getOrientation();
if(orientacionDeLaPantalla ==0){
Toast.makeText(pruebas.this, «Orientacion: Vertical con Valor»+ orientacionDeLaPantalla, Toast.LENGTH_SHORT).show();
}
if(orientacionDeLaPantalla ==1){
Toast.makeText(pruebas.this, «Orientacion: Horizontal con Valor»+ orientacionDeLaPantalla, Toast.LENGTH_SHORT).show();
}
}
}
//
Una cosa que debemos tener en cuenta es que este código no interpreta la orientación como vertical u horizontal, lo hace añadiéndole una valor de 0 ó 1 donde:
0 = “..La pantalla está en vertical”
1= “…La pantalla está en estado horizontal”
Teniendo presente esto, lo único que estamos haciendo es ejecutar el comando que va a leer la orientación de la pantalla
//
int orientacionDeLaPantalla = display.getOrientation();
//
Posterior a la indicación de que vamos a hacerlo
//
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
//
Desde este punto, lo único que está haciendo la aplicación es detectar la orientación, si el valor es 0, nos va a devolver un mensaje en pantalla diciendo que como el valor es igual que cero, sabemos que la pantalla está en posición vertical, lo mismo hará con la orientación horizontal si el valor es 1
Tened en cuenta que devuelve el mensaje tal como puede ejecutar un método, llamar a una actividad, etc. Lo que nosotros queramos, las posibilidades de esto, como siempre, quedan al servicio del desarrollador. Esta acción no requiere de ningún permiso en concreto.
Y veamos un tercer “Snippet”, sobre este sois bastantes los que habéis preguntado y es realmente simple.
Cuando realizamos una aplicación, teniendo en cuenta las características de android, es posible que esta requiera de conexión a internet y no de no haberla pueden producirse los incómodos “Cierres forzados”.
Cierto que existen diversas formas de que no se den estos cierres, pero en este caso lo que vamos a ver directamente es
Como detectar mediante código si nuestro terminal tiene conexión a internet
Ejecutando este método al inicio del onCreate o al inicio del método o acción de nuestro código que requiera internet, podemos avisar al usuario, aplicar una alternativa, etc, ya que se basa en un sencillo if/else
Vamos con el código:
//
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.widget.Toast;
publicclass pruebas extends Activity {
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo comprueboInternet = cm.getActiveNetworkInfo();
if (comprueboInternet != null && comprueboInternet.isConnectedOrConnecting()) {
Toast.makeText(pruebas.this, «SI hay internet», Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(pruebas.this, «NO hay internet», Toast.LENGTH_SHORT).show();
}
}
}
//
Lo vemos, en primero lugar estamos llamando al ConnetivityManager que es el encargado de las conexiones que se pueden realizar y mediante el NetworkInfo vamos a leer la actividad de la red con getActiveNetworkInfo()
Si comprobamos que existe conexión a internet mediante isConnectedOrConnecting()se nos va a devolver un sencillo mensaje que indica que “Si hay internet”, en caso contrario, pues obtendremos el mensaje de que no lo hay :)
Como siempre, importante, el permiso. En este caso no se nos va a requerir el permiso de acceso a internet, pero si el espcifico de estado de conexión, o lo que es lo mismo:
//
<uses-permission android:name=»android.permission.ACCESS_NETWORK_STATE»></uses-permission>
//
En este punto me gustaría insistir en lo mismo que he comentado antes, usando la imaginación, estos mensajes podemos sustituirlos por diferentes métodos a ejecutar, cuadros de diálogos con diversas opciones a tomar, etc.
Espero que estas líneas de código os puedan ser de ayuda, inspiración o simplemente o sean de apoyo a cualquier proyecto en que estéis trabajando o planeando empezar a trabajar.
El código al final siempre es el código, ya que como siempre me gusta terminar cada entrega, personalmente pienso que el desarrollo requiere de conocimientos, pero sobre todo de ganas, ilusión y originalidad.