AndroidSDK, crear un botón de actualización

Algunas veces necesitamos actualizar la aplicación desde el mismo Device o Tablet.Muchas veces estas se encuentran conectadas a alguna red inalámbrica.

El cliente necesita la última versión que, en general arregla algunos bugs o simplemente mejora nuestra aplicación móvil.

En AndroidSDK tenemos la posibilidad de lograrlo con estos simples códigos:

1- Creamos un button y lo conectamos con un método del controlador

2- Creamos una tarea asíncrona

3- Instanciamos la tarea en el método que llama el botón:

A tener en cuenta: Debemos ubicar nuestro APK en una URL válida.

CODIGO DEL ASYNCTASK (TAREA ASINCRONA)


import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.content.Context;

import android.content.Intent;

import android.net.Uri;

import android.os.AsyncTask;

import android.util.Log;


public class UpdateApp extends AsyncTask<String,Void,Void>{

private Context context;

public void setContext(Context contextf){

context = contextf;

}



@Override

protected Void doInBackground(String... arg0) {

try {

URL url = new URL(arg0[0]);

HttpURLConnection c = (HttpURLConnection) url.openConnection();

c.setRequestMethod("GET");

c.setDoOutput(true);

c.connect();


String PATH = "/mnt/sdcard/Download/";

File file = new File(PATH);

file.mkdirs();

File outputFile = new File(file, "update.apk");

if(outputFile.exists()){

outputFile.delete();

}

FileOutputStream fos = new FileOutputStream(outputFile);

InputStream is = c.getInputStream();

byte[] buffer = new byte[1024];

int len1 = 0;

while ((len1 = is.read(buffer)) != -1) {

fos.write(buffer, 0, len1);

}

fos.close();

is.close();

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(new File("/mnt/sdcard/Download/update.apk")), "application/vnd.android.package-archive");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!

context.startActivity(intent);

} catch (Exception e) {

Log.e("UpdateAPP", "Update error! " + e.getMessage());

}

return null;

}

}


CODIGO DEL METODO:


public void sincronizar(View view) throws NumberFormatException, ParseException {

UpdateApp atualizaApp = new UpdateApp();

atualizaApp.setContext(getApplicationContext());

atualizaApp.execute("http://myweb.com/android/myapp.apk");

}

Anuncios

Android SDK. Device no reconocido. Solución en MacOS

Trabajando con proyectos en Android, plataforma que junto a iOS tienen gran demanda en el mercado,me encontré con algunas particularidades.

Una de ellas fue sincronizar en DEBBUG MODE una tablet de marca genérica o poco conocida.
Eclipse, o mejor dicho, Android Manager no lo reconoce.

Lo primero que se hace es ejecutar por consola desde el directorio Platform Tools del SDK:  adb devices
Esto devuelve una lista con los dispositivos Android conectados. En mi caso esta lista está vacía.

Para lograr desarrollar con nuestra Tablet genérica seguir estos pasos:

1- Encontrar el ID del VENDOR. En Lion, solo debemos ver en Información del sistema, USB y a la derecha debería aparecer el dispositivo. En este paso tenemos el ID del fabricante o VENDOR

Captura de pantalla 2013-06-16 a la(s) 08.47.32

2- Ejecutar en consola el comando con nuestro ID:

echo 0x2207 >> ~/.android/adb_usb.ini

3- Ejecutar el Kill del adb y volver a arrancarlo:


adb kill-server
adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
12AA45556DEF001 device

Problema solucionado.