2014-06-27 10 views
5

Mamy aplikację w Sklepie Google Play, która nieprzerwanie działa na pierwszym planie. Urządzenia, na których działa, są poza naszą kontrolą i nie są zrootowane. Działają na systemie Android 4.2 lub 4.4.Jak automatycznie aktualizować nieprzerwanie działającą aplikację na Androida bez interakcji użytkownika

Naszym celem jest aktualizacja aplikacji do najnowszej wersji, którą udostępniamy w Sklepie Play bez interakcji użytkownika. Ponowne uruchomienie urządzenia byłoby jedyną dopuszczalną opcją "interakcji".

Uważamy, że uruchomiona aplikacja nie aktualizuje się automatycznie, gdy jest uruchomiona, nawet jeśli "automatyczna aktualizacja" jest włączona.

Jaka jest droga do osiągnięcia naszego celu?

Odpowiedz

0

Użyj Menedżera alarmów, aby zaplanować aktualizację, a następnie utwórz klasę i rozszerzyć klasę usługi lub IntentService. Sprawdź, czy jest połączenie z Internetem, jeśli tak, przejdź do aktualizacji w ten sposób: Sprawdź ten link Android Services - Tutorial W ten sposób możesz zaktualizować nawet nie wyświetlając swojej aktywności przy użyciu usługi.

Tworzenie Menedżer Alarm:

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

usług:

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

Zauważ, że powyższy kod jest przykładem .. tylko z linku dałem –

+1

Spowoduje to pobranie aktualizacji, ale kiedy/gdzie ma miejsce faktyczna instalacja aktualizacji aplikacji? –

Powiązane problemy