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