2014-11-14 17 views
22

Stiamo scrivendo un'app per Android che mostra annunci su schermi di grandi dimensioni. Abbiamo un back-end in cui gli inserzionisti possono selezionare gli annunci, in modo che vengano aggiornati quasi istantaneamente. Poiché ci saranno molte scatole Android in esecuzione (collegate a schermi HDMI), dovremmo essere in grado di aggiornare il nostro software da remoto.Installa APK Android senza richiesta

Questo è il caso:

applicazione principale sia sempre in funzione (a meno che non spento) e gli utenti non vedono mai niente Android correlati. Abbiamo bisogno di un'app di aggiornamento che ascolti gli aggiornamenti ed elimini l'apk principale, installa un nuovo apk. Durante l'aggiornamento mostreremo un'attività con "Aggiornamento, attendere prego", finché il nuovo apk principale non sarà installato e visualizzato.

quello che ci serve:

Abbiamo bisogno di aiuto su come attuare il meccanismo di aggiornamento senza chiedere conferma all'utente sul dispositivo rooted.

Quello che abbiamo:

L'applicazione di aggiornamento è agganciato nel bagagliaio ricevuto dell'evento, dove un servizio inizia (questo servizio ascolteranno per gli aggiornamenti, che saranno attuate da un collega più presto). Il servizio può avviare un'attività che richiede l'aggiornamento delle informazioni durante l'aggiornamento.

Nell'attività di aggiornamento

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

Lo StringBuilder stampa 11, ma fa lo stesso se io do il comando casuale inesistente ..

nel manifesto

<!-- 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" /> 

I pacchetti Installa ed elimina i pacchetti sono inutili se non installo la mia app come sy stem stem, sono corretto?

Per farla breve, nessuna installazione del mio APK di test e non ho idea di come risolverlo. Qualsiasi aiuto sarebbe apprezzato!

+1

se si ha l'accesso root, mettere l'applicazione di aggiornamento in/system/app/e si otterrà l'INSTALL_PACKAGES e Autorizzazione DELETE_PACKAGES – nandeesh

risposta

25

È possibile utilizzare semplicemente il comando adb install per installare/aggiornare APK in modo silenzioso. Il codice di esempio è al di sotto

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

O

prega di controllare http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

+0

Dove si ottiene la classe StringUtil? – TomCB

+0

controlla la mia risposta aggiornata – Palak

+7

Funziona, ho usato "pm install" invece di "adb install"! Grazie! – TomCB