Originariamente inviato da
IOeTU
Allora, ecco il codice che ho trovato (i commenti sono miei, aiutatemi a capire se sono giusti):
MainActivity
@
Override
public void onCreate(Bundle savedInstanceState) {
//omissis
if (isOnline()) { //Se il telefono è connesso, controlla gli aggiornamenti
checkForUpdates();
}
}
//Controllo se è disponibile la connessione ad internet
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting( );
}
public void checkForUpdates() {
String url = "http://www.server.com/yourapp.apk"; //L'indirizzo dove è hostato l'apk
String PATH = Environment.getExternalStorageDirectory() + "/download/"; //Il percorso in cui verrà scaricato
File file = new File(PATH); //Crea un nuovo file nel percorso specificato
file.mkdirs(); //Se necessario, crea le sottocartelle mancanti
File outputFile = new File(file, "yourapp.apk"); //Scrive il file
UpdateWithoutPlayStore.downloadFile(url, outputFile);
UpdateWithoutPlayStore.installApp(context);
UpdateWithoutPlayStore.deleteApk("yourapp.apk");
}
UpdateWithoutPlayStore class
//Tutti gli import del caso
public class UpdateWithoutPlayStore {
{
}
public static void downloadFile(String url, File outputFile) {
try {
URL u = new URL(url); //Prende l'url del sito
URLConnection conn = u.openConnection(); //Si collega al sito
int contentLength = conn.getContentLength(); //Restituisce la lunghezza in byte del file da scaricare
DataInputStream stream = new DataInputStream(u.openStream()); //Crea un oggetto della classe DataInputStream - dovrebbe servire per il download vero e proprio
byte[] buffer = new byte[contentLength];
stream.readFully(buffer);
stream.close();
DataOutputStream fos = new DataOutputStream(new FileOutputStream(outputFile)); //Crea un oggetto della classe DataOuyputStream
fos.write(buffer); //Scrive il file
fos.flush(); //Svuota il buffer dell'oggetto fos (potrei aver detto una fesseria)
fos.close(); //Chiude fos
} catch (FileNotFoundException e) { //Se il file non è stato trovato, riporta questo errore
Log.e("FileNotFoundException", e + "");
} catch (IOException e) { //Se ci sono stati problemi di I/O riporta questo altro errore
Log.e("IOException", e + "");
}
}
public static void installApp(Context mycontext) {
Intent installer = new Intent(); //Crea un nuovo intent
installer.setAction(android.content.Intent.ACTION_ VIEW);
String PATH = "file://" + Environment.getExternalStorageDirectory() + "/download/yourapp.apk"; //Specifica il perccorso dove è stato salvvvato il file
installer.setDataAndType(Uri.parse(PATH), "application/vnd.android.package-archive");
mycontext.startActivity(installer); //Lo installa
}
public static void deleteApk(String fileName) {
String fullPath = Environment.getExternalStorageDirectory() + "/download/";
try {
File file = new File(fullPath, fileName);
if (file.exists()) {
file.delete();
Log.e("FileStatus","deleted");
}
} catch (Exception e){
Log.e("Exception",e.getMessage());
}
}
}
Questo dovrebbe essere quanto necessario per:
1-controllare la connessione ad internet
2-scaricare il file
3-installare la nuova versione
4-cancellare il file
Quello di cui ora ho bisogna è sapere come controllare il versionCode dell'app hostata su Drive e confrontarlo con quello dell'app in uso.
Grazie mille in anticipo