Programación Android Rafael Morón Abad rafaelmoron@gmail.com
APIs para red Android con9ene el paquete java.net. La clase base para acceso a red es HApURLConnec9on. Para acceder a Internet, se requiere el permiso android.permission.internet. Debe evitarse realizar accesos a Internet desde el hilo de Interfaz de Usuario. En Android 3.0 se pueden establecer polí9cas que no permitan a la aplicación hacer cosas incorrectas (Modo Estricto), entre ellas el acceso a Internet desde el hilo de Interfaz de usuario.
Modo Estricto Para Android 3.0 o superior (API 11), se pueden relajar las restricciones del modo estricto.! @Override public void oncreate(bundle savedinstancestate)! {!!!!StrictMode.ThreadPolicy policy = new StrictMode.!!!ThreadPolicy.Builder().permitAll().build();!!StrictMode.setThreadPolicy(policy);!!! }!
1 - HApURLConnec9on Es un cliente HTTP. Hay otros clientes, pero este es el recomendado por el equipo de desarrollo de Android. Por ejemplo, recuperamos la página de desarrollo de Android.! URL url = new URL("http://developer.android.com/");! HttpURLConnection urlconnection = (HttpURLConnection) url.openconnection();! try {! InputStream in = new BufferedInputStream (urlconnection.getinputstream());! readstream(in);! finally {! urlconnection.disconnect();! }! }!
2 - DefaultHApClient Es el cliente HTTP de la librería de Apache, contenida en Android. No es segura a hilos. Ejemplo de acceso a red:! HttpClient client = new DefaultHttpClient();! HttpGet request =!!new HttpGet("http://developer.android.com");! HttpResponse response = client.execute(request);! // Get the response! BufferedReader rd = new BufferedReader(new InputStreamReader(!!response.getEntity().getContent()));! String line = "";! while ((line = rd.readline())!= null) {!!textview.append(line);! }!
3 - AndroidHApClient Es una implementación de DefaultHApClient específica para Android. Es segura a hilos. Está disponible desde Android 2.2 Froyo (API 8). Se puede obtener una instancia mediante:!public static AndroidHttpClient newinstance!(string useragent);! siendo useragent la cadena que iden9fica a nuestra aplicación como navegador. Podemos usar cualquier valor
Y para los accesos no- HTTP? Android 9ene la clase java.net.urlconnec9on, que permite acceder a recursos mediante otros protocolos. Los protocolos soportados na9vamente por Android a través de esta clase son: File, FTP, HTTP, HTTPS y Jar. Podemos registrar otros manejadores para estos u otros protocolos mediante: URL.setURLStreamHandlerFactory!!(URLStreamHandlerFactory factory)!
Ejemplo de acceso no- HTTP Recuperar un fichero via FTP: URL url = new URL!!!("ftp://mirror.csclub.uwaterloo.ca/index.html");! URLConnection urlconnection = url.openconnection();! InputStream in = new BufferedInputStream (urlconnection.getinputstream());! try {! }!!readstream(in);!!finally {!!!in.close();!!}!
Caso par9cular: Actualización Si publicamos una aplicación en Android Market o cualquier otra 9enda de aplicaciones, estas proporcionan un mecanismo de actualización bien soportado por Android. Pero muchas aplicaciones no son públicamente accesibles, sobre todo las dirigidas a grupos cerrados o a la ges9ón u opera9va interna de un organismo o empresa. Por eso explicaremos un caso prác9co de actualización. Fuente: hap://blog.js- development.com/2011/02/coding- update- func9onality- for- your.html
Versionado de la Aplicación Hay dos atributos del Manifiesto.xml que nos indican la versión: android:versioncode Integer. Representa la versión del código o el número de la release. android:versionname String. Una cadena que representa un número de versión que se mostrará a los usuarios.
Versionado de la Aplicación (II) <?xml version="1.0" encoding="utf- 8"?> <manifest xmlns:android=" http://schemas.android.com/apk/res/ android" package="com.ejemplo.tuapp" android:versioncode="106" android:versionname="1.6.109 dev">... </manifest>
Lectura del código de la aplicación public static int getversioncode PackageManager pm = (Context context) { context.getpackagemanager(); try { PackageInfo pi = pm.getpackageinfo (context.getpackagename(), 0); } return pi.versioncode; } catch (NameNotFoundException ex) {} return 0;
Publicar actualización disponible Una forma de publicar las actualizaciones puede ser: 1. Se coloca el paquete.apk con la aplicación en un servidor accesible via Internet (p.e. Dropbox). 2. Se coloca un fichero de texto con el código de versión de la úl9ma actualización disponible. Se puede descargar el fichero.apk y obtener de ahí la versión, pero eso podría generar mucho tráfico según el comportamiento de la caché de archivos de Internet.
Detectar actualización disponible 1. La aplicación descarga periódicamente el fichero con la versión 2. Se compara la versión disponible con la actual 3. Si la disponible es más reciente, se propone al usuario la actualización, con un código similar a este: Intent updateintent = new Intent (Intent.ACTION_VIEW, Uri.parse( http://ubicacion/app.apk )); startactivity(updateintent);