Salve io ho cercato tanto su internet ma non sono riuscito a trovare niente tranne questo
l'errore sta sul installare l'apk poiché sinceramente non saprei come inizializzarlo.
l'altro problema era se per caso esistesse un modo dove la mia app possa anche controllare la versione aggiornata su quel sito.. è possibile?
Java:
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); <- ERRORE
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());
}
}
}
l'errore sta sul installare l'apk poiché sinceramente non saprei come inizializzarlo.
l'altro problema era se per caso esistesse un modo dove la mia app possa anche controllare la versione aggiornata su quel sito.. è possibile?