Wie kann ich programmgesteuert apk schweigend aktualisieren und die App neu starten?

Ich habe viele Möglichkeiten in StackOverFlow und andere Website gegeben, aber es funktioniert nicht wirklich.

Mein Problem ist, dass ich diese Anwendung habe, die ich aktualisieren muss und nach der Aktualisierung, sollte es automatisch die gleiche Anwendung (aktualisiert) wieder auf.

  • Wie schaffe ich eine freigegebene apk-Datei mit Gradle?
  • Wie kann ich Vibrationsanimation für ImageView machen?
  • OTA-Updates für Geräte-Besitzer Android-Anwendung (Kiosk-Modus)
  • Wie kann man lange Pressereignisse für Listview-Item einer ListActivity erfassen?
  • So fügen Sie zwei Textfelder in einem Alert-Dialogfeld hinzu
  • IsValidFragment Android API 19
  • Das ist mein Code:

    private synchronized void runRootUpdate() { // Install Updated APK String command = "pm install -r " + downloadPath + apkFile; Process proc = Runtime.getRuntime().exec(new String[] {"su", "-c", command}); int test = proc.waitFor(); // Error is here. if (proc.exitValue() == 0) { // Successfully installed updated app doRestart() } else { // Fail throw new Exception("Root installation failed"); } } private void doRestart() { Intent mStartActivity = new Intent(context, MainActivity.class); int mPendingIntentId = 123456; PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent); System.exit(0); } 

    Werfen Sie einen Blick auf meine "Fehler ist hier." Meine alte App wird eine neue aktualisierte App installiert und tötet sich selbst, also gibt es keine proc.waitFor () und endet zurück in den Home-Bildschirm, aber die neue aktualisierte App wird installiert. Allerdings brauche ich es, um es wieder einzuschalten. Gibt es irgendwie so könnte ich das machen?

  • Wenn das Fragment mit SwipeRefreshLayout während der Erfrischung, Fragment friert aber eigentlich noch funktionieren
  • Wie für ein Praktikum bewerben?
  • Was ist das entspricht einem JavaScript-SetInterval / setTimeout in Android / Java?
  • Kein Style ViewPagerIndicator in Kombination mit SherlockActionBar
  • VerifyError mit Mockito 1.9.5 und DexMaker-Mockito-1.0
  • So ändern Sie SIM Application Toolkit (STK) Rooted Mobile
  • 4 Solutions collect form web for “Wie kann ich programmgesteuert apk schweigend aktualisieren und die App neu starten?”

    Anstatt einen Alarm einzustellen, haben Sie einen Manifest registrierten BroadcastReceiver speziell für diesen Zweck. Es kann entweder auf android.intent.action.PACKAGE_REPLACED (Hinweis: die android.intent.action.PACKAGE_REPLACED fehlt dieser Konstante) oder auf android.intent.action.MY_PACKAGE_REPLACED

     <receiver android:name="..."> <intent-filter> <action android:name="android.intent.action.PACKAGE_REPLACED"></action> <data android:scheme="package" android:path="com.your.package" /> </intent-filter> </receiver> 

    Nach der Neuinstallation erhalten Sie Ihre Nachricht und Sie können eine Aktivität starten

    Das Aktualisieren einer Anwendung beinhaltet das Töten aller Prozesse. Sie sollten den Alarm vor dem Start des pm-Befehls einstellen (mit mehr als 100 ms Verzögerung)

    Zuerst müssen Sie wissen, wo Sie Ihre .apk-Datei speichern können, da dies beim Upgrade der Anwendung wichtig ist.

    Um die Anwendung zu aktualisieren und zu starten, müssen Sie folgende Schritte durchführen.

    Stellen Sie sicher, dass Sie die neueste .apk-Datei in Ihrer SDH-Datei haben, während Sie Ihre Anwendung aktualisieren. Wenn Sie es dann über die Absicht wie unten für das Upgrade starten

     File file = new File(Environment.getExternalStorageDirectory(), "app-debug.apk"); // mention apk file path here if (file.exists()) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent); } else { Toast.makeText(UpdateActivity.this, "file not exist", Toast.LENGTH_SHORT).show(); } 

    Über Code wird Ihre Anwendung mit Standard-Verhalten von Android zu aktualisieren.

    Erstellen Sie einen Broadcast-Empfänger, der wissen wird, wann das Upgrade durchgeführt wird

      <receiver android:name=".receiver.OnUpgradeReceiver"> <intent-filter> // Note: This intent can is available starting from API 12 <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> 

    Wenn du mit api> 12 benutest

     <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> 

    Wenn du api <= 12 hast

      <action android:name="android.intent.action.PACKAGE_REPLACED" /> <data android:scheme="package" android:path="your.app.package" /> 

    Erstellen Sie einen Broadcast-Empfänger für die Übertragung nach dem Update und starten Sie die Aktivität, die Sie wollen

    Beispiel:

     public class OnUpgradeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // launch your fav activity from here. } } 

    Über dem Broadcast-Empfänger können Sie die Anwendung leise starten.

    Hoffe, diese helfen dir.

    Hmm … Warum dieses harte Metod verwenden , wenn du eine Root-Installation verwende? Warum nicht zu versuchen, erstellen einfache Shell-Skript, um App zu aktualisieren? Dann musst du keinen Alarm machen und andere Dinge machen:

    Script ( Wie man Argumente übergibt , wie man App vom Terminal startet ):

     am kill com.myapp.package pm install -r $1 am start -n packageName/pkgName.ActivityName 

    App-Code:

     String command = "sh script.sh " + downloadPath + apkFile; Process proc = Runtime.getRuntime().exec(new String[] {"su", "-c", command}); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.