2014-06-27 8 views
5

Abbiamo un'app nel Google Play Store che viene eseguita in primo piano continuamente. I dispositivi su cui gira sono fuori dal nostro controllo e non sono radicati. Funzionano su Android 4.2 o 4.4.Come aggiornare automaticamente un'applicazione Android in esecuzione continua senza interazione dell'utente

Il nostro obiettivo è avere l'aggiornamento dell'app alla versione più recente che rilasciamo tramite il Play Store senza l'interazione dell'utente. Il riavvio del dispositivo sarebbe l'unica opzione di "interazione" accettabile.

Troviamo che un'app in esecuzione non viene aggiornata automaticamente quando è in esecuzione anche se è attivato "l'aggiornamento automatico".

Qual è il modo per raggiungere il nostro obiettivo?

risposta

0

Utilizzare un gestore allarmi per pianificare l'aggiornamento, quindi utilizzare una classe e estendere il servizio o la classe IntentService. Verifica se esiste una connessione Internet se si procede ad aggiornare in questo modo: Controlla questo link Android Services - Tutorial In questo modo puoi aggiornare anche se non mostra la tua attività utilizzando il servizio.

Creazione del Alarm Manager:

Calendar cal = Calendar.getInstance(); 

Intent intent = new Intent(this, MyService.class); 
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
// Start every 30 seconds 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

Per il servizio:

public class DownloadService extends IntentService { 

    private int result = Activity.RESULT_CANCELED; 
    public static final String URL = "urlpath"; 
    public static final String FILENAME = "filename"; 
    public static final String FILEPATH = "filepath"; 
    public static final String RESULT = "result"; 
    public static final String NOTIFICATION = "com.vogella.android.service.receiver"; 

    public DownloadService() { 
    super("DownloadService"); 
    } 

    // will be called asynchronously by Android 
    @Override 
    protected void onHandleIntent(Intent intent) { 
    String urlPath = intent.getStringExtra(URL); 
    String fileName = intent.getStringExtra(FILENAME); 
    File output = new File(Environment.getExternalStorageDirectory(), 
     fileName); 
    if (output.exists()) { 
     output.delete(); 
    } 

    InputStream stream = null; 
    FileOutputStream fos = null; 
    try { 

     URL url = new URL(urlPath); 
     stream = url.openConnection().getInputStream(); 
     InputStreamReader reader = new InputStreamReader(stream); 
     fos = new FileOutputStream(output.getPath()); 
     int next = -1; 
     while ((next = reader.read()) != -1) { 
     fos.write(next); 
     } 
     // successfully finished 
     result = Activity.RESULT_OK; 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (stream != null) { 
     try { 
      stream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
     if (fos != null) { 
     try { 
      fos.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
    } 
    publishResults(output.getAbsolutePath(), result); 
    } 

    private void publishResults(String outputPath, int result) { 
    Intent intent = new Intent(NOTIFICATION); 
    intent.putExtra(FILEPATH, outputPath); 
    intent.putExtra(RESULT, result); 
    sendBroadcast(intent); 
    } 
} 
+0

Nota che il codice di cui sopra è solo un esempio .. dal link che ho dato –

+1

Questo scaricherà gli aggiornamenti, ma quando/dove si verifica l'installazione effettiva dell'aggiornamento delle app? –

Problemi correlati