2016-07-21 27 views
0

Ich habe eine Anwendung, die remote mit neuer Version aktualisiert wird, durch Ändern des Versionscodes. Update wird von einem Back-End-Seite geschoben und Telefon ist Update der apk mit dem adb OTA-Client.Wie empfangen Broadcast selbst, wenn meine Anwendung mit neuen Versionscode aktualisiert Android

Nach Abschluss des OTA-Updates muss ich den Status mit der Anwendung pro-grammatisch an das Back-End senden.

Ich kann das tun, mit einem Launcher, der tatsächlich das Paket erhält geändert oder entfernt zugehörige Absicht Aktion und starten Sie dann die Haupt-App. Anschließend sendet die Anwendung den OTA-Aktualisierungsstatus ohne Benutzerinteraktion an das Back-End. Hier ist der Beispielcode. Im Launcher App-Manifest:

<receiver android:name=".receivers.PackageChangedReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
       <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
       <data android:scheme="package"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </receiver> 

ist hier der Empfänger:

@Override 
    public void onReceive(Context context, Intent intent) { 
     String packageName=intent.getData().getEncodedSchemeSpecificPart(); 
     if(packageName.contains(context.getString("packagename"))) 
     context.startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK)); 
    } 

Jetzt ist meine Frage, wie kann ich die Haupt-App die gleichen Dinge wie Start tun und senden OTA Update-Status nur mit der Hauptanwendung ohne Launcher und Benutzerinteraktion in der App nach dem OTA-Update?

+0

Ich verstehe Ihre Frage nicht. Du sagst, du machst bereits die Dinge und dann fragst du, wie das geht? Bitte erläutern Sie genauer, was Sie tun und was Sie nicht tun, aber Hilfe benötigen. –

+0

@DavidWasser Ja, ich kann es mit einer Drittanbieter-App wie Launcher-App, die tatsächlich für das Empfangen von Haupt-App-Paket Änderungen Broadcast-Status verantwortlich ist und es an das Back-End senden. Meine Frage ist, kann ich die gleichen Dinge ohne Hilfe von Drittanbietern tun. Verwenden Sie nur meine Haupt-App. – 0xalihn

Antwort

0

Sie können Ihre eigene Anwendung fangen die Sendung Intent, wie die Launcher-App. Dann können Sie tun, was Sie wollen. Erstellen Sie eine BroadcastReceiver in Ihrer Anwendung und fügen Sie diese Einträge zu dem Manifest:

<receiver android:name=".MyBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
     </intent-filter> 
    </receiver> 

Sie brauchen nicht die <category> oder <data> Tags und es ist sinnlos für PACKAGE_REMOVED zu hören, weil, wenn die App entfernt wird Sie nicht erhalten trotzdem ausgelöst.

+0

Ich kann den Broadcast-Empfänger von meiner Anwendung selbst nicht empfangen. Ich habe dies in meiner Anwendung implementiert und installieren Sie es auf dem Gerät zuerst deinstallieren Sie das Paket (adb uninstall Paketname) nach der Installation der apk (adb install apk), aber nach der Installation konnte ich keine anmelden BroadcastReceiver. Das bedeutet, BroadcastReceiver ruft nicht an. – 0xalihn

+0

Nein, wenn Sie es deinstallieren und dann neu installieren, wird das nicht funktionieren. Du hast in deiner Frage gesagt, dass du ein OTA "update" machst. Ich nahm an, dass du ** eine bestehende Anwendung aktualisieren würdest **. Wenn Ihre App deinstalliert und dann erneut installiert wird, können Sie nichts tun, da Ihre App zuerst manuell gestartet werden muss, bevor sie ausgeführt werden kann. –

+0

Wenn Sie das Tool eines Drittanbieters nicht verwenden möchten, können Sie selbst eine andere Anwendung schreiben. Diese App würde auf dem Gerät installiert werden und nach App-Installationen/-Entfernungen suchen. Sie könnte Ihre App automatisch starten, wenn sie installiert wird, und könnte Ihren Server automatisch aktualisieren (genau wie die App von Drittanbietern). Dies müsste jedoch eine separate Anwendung sein. –