2014-11-14 14 views
22

Wir schreiben eine Android-App, die Anzeigen auf großen Bildschirmen zeigt. Wir verfügen über ein Backend, in dem Werbetreibende die Anzeigen auswählen können, sodass sie fast sofort aktualisiert werden. Da es viele Android-Boxen geben wird (die in HDMI-Bildschirme gesteckt werden), sollten wir in der Lage sein, unsere Software aus der Ferne zu aktualisieren.Installieren Sie Android APK ohne Aufforderung

Dies ist der Fall:

Haupt App kontinuierlich ausgeführt wird (es sei denn, ausgeschaltet) und die Benutzer nie etwas Android im Zusammenhang sehen. Wir brauchen eine Updater-App, die auf Updates wartet und die Haupt-apk löscht, installiert eine neue apk. Während der Aktualisierung wird eine Aktivität mit "Aktualisieren, bitte warten" angezeigt, bis die neue Haupt-APK installiert ist und angezeigt wird.

Was wir brauchen:

Wir brauchen Hilfe, wie ohne den Benutzer auf ROOTED DEVICE den Update-Mechanismus zu implementieren.

Was wir haben:

Der Updater App in das Boot empfangene Ereignis verhakt ist, wo ein Dienst gestartet wird (dieser Service für Updates hören, die bald von einem Kollegen umgesetzt werden). Der Dienst kann eine Aktivität starten, die während der Aktualisierung die Aktualisierungsinformationen anfordert.

In der Aktualisierungsaktivität

try { 
      Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"}); 
      stringBuilder.append(String.valueOf(proc.waitFor())); 
      stringBuilder.append("\n"); 
     } catch (Exception e) { 
      if (e instanceof IOException) { 
       Log.d(TAG, "IOException"); 
      } else if (e instanceof InterruptedException) { 
       Log.d(TAG, "InterruptedException"); 
      } else { 
       e.printStackTrace(); 
      } 
     } 

Der String 11 druckt, aber tut das gleiche, wenn ich zufällig unexisting Befehl .. geben

Im Manifest

<!-- Permission to start UpdaterService on boot --> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<!-- Install/delete permissions, only granted to system apps --> 
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
<uses-permission android:name="android.permission.DELETE_PACKAGES" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Die Pakete installieren und Pakete löschen sind nutzlos, wenn ich meine App nicht als sy installiere Stamm-App, bin ich richtig?

Lange Rede, kurzer Sinn, keine Installation meines Test APK, und ich habe keine Ahnung, wie das zu lösen ist. Jede Hilfe wäre willkommen!

+1

, wenn Sie den Root-Zugriff zu tun haben, legen Sie die Aktualisierungs App in/system/app/und Sie werden die INSTALL_PACKAGES bekommen und DELETE_PACKAGES Berechtigung – nandeesh

Antwort

25

Sie können den Befehl adb install einfach verwenden, um APK automatisch zu installieren/zu aktualisieren. Beispielcode ist unter

public static void InstallAPK(String filename){ 
    File file = new File(filename); 
    if(file.exists()){ 
     try { 
      String command; 
      command = "adb install -r " + filename; 
      Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }); 
      proc.waitFor(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

ODER

Bitte überprüfen http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

+0

Woher bekommst du die StringUtil-Klasse? – TomCB

+0

Überprüfen Sie meine aktualisierte Antwort – Palak

+7

Es funktioniert, ich habe "pm install" anstelle von "adb install" verwendet! Vielen Dank! – TomCB

Verwandte Themen