2014-06-27 9 views
5

Wir haben eine App im Google Play Store, die ständig im Vordergrund läuft. Die Geräte, auf denen es ausgeführt wird, liegen außerhalb unserer Kontrolle und sind nicht verwurzelt. Sie laufen entweder auf Android 4.2 oder 4.4.So aktualisieren Sie eine kontinuierlich laufende Android App ohne Benutzerinteraktion

Unser Ziel ist es, die App auf die neueste Version zu aktualisieren, die wir ohne Benutzerinteraktion über den Play Store veröffentlichen. Das Gerät neu zu starten wäre die einzig akzeptable "Interaktion" -Option.

Wir finden, dass eine laufende App nicht automatisch aktualisiert wird, wenn sie ausgeführt wird, auch wenn das "automatische Update" aktiviert ist.

Wie ist unser Ziel zu erreichen?

Antwort

0

Verwenden Sie einen Alarmmanager, um das Update zu planen, und verwenden Sie dann eine create a-Klasse und erweitern Sie die Service- oder IntentService-Klasse. Überprüfen Sie, ob es eine Internetverbindung gibt, wenn ja, um fortzufahren, wie folgt: Überprüfen Sie diesen Link Android Services - Tutorial Auf diese Weise können Sie aktualisieren, sogar nicht Ihre Aktivität durch Verwendung von Service zeigen.

Erstellen des 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); 

Für Service:

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

Beachten Sie, dass der Code über ein Beispiel ist nur .. aus dem angegebenen Link i –

+1

Dieses Updates herunterladen, aber wenn/Wo erfolgt die eigentliche Installation des App-Updates? –

Verwandte Themen