CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 6 su 6
Discussione:

Aggiornare app senza Play Store

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Oct 2012
    Località
    Siderno (RC)
    Messaggi
    30
    Smartphone
    Samsung Galaxy S3 Neo

    Ringraziamenti
    8
    Ringraziato 1 volta in 1 Post
    Predefinito

    Aggiornare app senza Play Store

    Salve a tutti,
    mi sono da poco cimentato nella programmazione con android studio e ho realizzato la mia app abbastanza stabile.
    Ora vorrei proporla ad alcuni per il testing (non è pensata come app per il pubblico) ma prima vorrei implementare alcune righe di codice che permettano l'aggiornamento automatico (proprio perchè l'app non è pensata per il pubblico non finirà su Google Play).

    Vorrei hostare l'apk sul mio account Google Drive e far si che ad ogni avvio l'app confronti il suo numero di versione con quello dell'apk su drive e, se necessario, scarichi la nuova versione, la installi e ne cancelli l'apk.

    Ho cercato qualcosa anche su StackOverflow ma non sono un'asso nell'inglese e quindi quel poco che ho trovato non l'ho capito.

    Potreste aiutarmi? (Forse chiedo troppo ma l'ideale sarebbe un codice di esempio opportunamente commentato)
    Vi ringrazio molto

    Inviato dal mio GT-I9301I usando Androidiani App

    EDIT: Forse ho trovato qualcosa...
    Ultima modifica di IOeTU; 26-09-16 alle 11:13
    Samsung Galaxy S3 Neo (GT-I9301I)
    Versione Android: 4.4.2 KitKat (Stock)
    Processore: Qualcomm Snapdragon 400 @1,4Ghz (Quad-Core)
    RAM: 1,5 Gb | Mem. Interna: 16 Gb

    Altri dispositivi:
    Huawei G510 (Touch andato)
    Samsung Galaxy Next Turbo (Gt-S5570I)

  2.  
  3. #2
    Baby Droid


    Registrato dal
    Oct 2012
    Località
    Siderno (RC)
    Messaggi
    30
    Smartphone
    Samsung Galaxy S3 Neo

    Ringraziamenti
    8
    Ringraziato 1 volta in 1 Post
    Predefinito

    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
    Samsung Galaxy S3 Neo (GT-I9301I)
    Versione Android: 4.4.2 KitKat (Stock)
    Processore: Qualcomm Snapdragon 400 @1,4Ghz (Quad-Core)
    RAM: 1,5 Gb | Mem. Interna: 16 Gb

    Altri dispositivi:
    Huawei G510 (Touch andato)
    Samsung Galaxy Next Turbo (Gt-S5570I)

  4. #3
    Baby Droid


    Registrato dal
    Nov 2016
    Messaggi
    5

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    l'errore sta nella classe di playstore perché è una classe statica quindi diventa
    public static class UpdateWithoutPlayStore ecc.

    però c'è un errore anche per
    UpdateWithoutPlayStore.installApp(context)
    l'errore sta nel context

  5. #4
    Androidiano


    Registrato dal
    Dec 2015
    Messaggi
    151

    Ringraziamenti
    3
    Ringraziato 20 volte in 19 Posts
    Predefinito

    Quote Originariamente inviato da IOeTU Visualizza il messaggio
    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
    Prova a implementare una soluzione tua, puoi far scaricare un file text dove dentro ci metti l'ultimo version code della tua app: se questo è diverso dal version code della app che lo sta utilizzando allora fai partire il download. L'implementazione è abbastanza facile (puoi utilizzare le funzioni che hai postato come connection manager per verificare internet etc.)

  6. #5
    Androidiano


    Registrato dal
    Feb 2015
    Messaggi
    185

    Ringraziamenti
    2
    Ringraziato 14 volte in 14 Posts
    Predefinito

    Quote Originariamente inviato da Cyromono Visualizza il messaggio
    Prova a implementare una soluzione tua, puoi far scaricare un file text dove dentro ci metti l'ultimo version code della tua app: se questo è diverso dal version code della app che lo sta utilizzando allora fai partire il download. L'implementazione è abbastanza facile (puoi utilizzare le funzioni che hai postato come connection manager per verificare internet etc.)
    Io faccio esattamente così, un file version.txt sul server con l'ultima versione.
    Se la versione scaricata è > di quella installata allora appare la dialog che avverte che c'è un aggiornamento e se si vuole aggiornare, se si preme Sì parte il download e l'aggiornamento.
    Ovviamente finchè non si apre l'app non si saprà mai se c'è una nuova versione o meno. A questo io ovvio con un messaggio push che avvisa della nuova versione. Tappando sul messaggio si apre l'app e parte la procedura descritta.

  7. #6
    Androidiano


    Registrato dal
    Dec 2015
    Messaggi
    151

    Ringraziamenti
    3
    Ringraziato 20 volte in 19 Posts
    Predefinito

    Quote Originariamente inviato da NewBlackMamba Visualizza il messaggio
    Quote Originariamente inviato da Cyromono Visualizza il messaggio
    Prova a implementare una soluzione tua, puoi far scaricare un file text dove dentro ci metti l'ultimo version code della tua app: se questo è diverso dal version code della app che lo sta utilizzando allora fai partire il download. L'implementazione è abbastanza facile (puoi utilizzare le funzioni che hai postato come connection manager per verificare internet etc.)
    Io faccio esattamente così, un file version.txt sul server con l'ultima versione.
    Se la versione scaricata è > di quella installata allora appare la dialog che avverte che c'è un aggiornamento e se si vuole aggiornare, se si preme Sì parte il download e l'aggiornamento.
    Ovviamente finchè non si apre l'app non si saprà mai se c'è una nuova versione o meno. A questo io ovvio con un messaggio push che avvisa della nuova versione. Tappando sul messaggio si apre l'app e parte la procedura descritta.
    Esattoo, è la soluzione più semplice e la implementi in 5 minuti, segui la procedura di blackmamba


    Inviato dal mio ALE-L21 usando Androidiani App

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy