So rufen Sie ein Android-remote-service (IPC) aus einer Widget / local service?

Ich versuche, remote-control eine live wallpaper von einem widget. Sie sind in der gleichen APK, aber offensichtlich unterschiedliche Prozesse. Aufruf einer "Aktivität" von der live-Tapete ist von wenig nutzen für mich, da es ist ein anderer Prozess. Das widget verfügt über einfache Knöpfe, die, wenn Sie gedrückt,

So was (glaube ich) ich brauche, ist IPC und AIDL.

Zuerst habe ich die AIDL auf der Tapete-Seite, die gut geklappt hat. Es hat drei Methoden, mit keine zusätzlichen Parameter. Aber wenn ich fügte hinzu, die clientseitiger auf das widget, ich bekam eine Fehlermeldung sagt mir, dass ich keine Bindung an die remote-Schnittstelle, da das widget ist bereits ein BroadcastListener. Ich versuchte, Knopf-handling, ohne das Widget zu sein BroadcastListener, aber das scheint unmöglich zu sein.

Gut kein problem, oder? Ich habe gerade einen service kreiert, in der widget, der an das remote-interface, da während der widget ist ein BroadcastListener, ist der Dienst nicht, und alles sollte in Ordnung sein.

Oder so dachte ich.

Gut, ich bin immer der widget-Tasten, um trigger-widget-service. Die Bindung an die remote-service ergibt mir folgende Warnung:

Unable to start service Vorsatz (act=Kom.blabla.IRemoteService): nicht gefunden.

Ich bin mit getApplicationContext() innerhalb des service des widgets zu binden, um die remote-Zeug. Ich habe das widget service im manifest, aber ich habe nicht das remote-service gibt. Wenn ich es, ich bekomme eine unspezifische InstantiationException.

In der Widget Service onStart() ich bin, dies zu tun:

getApplicationContext().bindService(new Intent(IWallpaperRemote.class.getName()), 
  mConnection, Context.BIND_AUTO_CREATE);

Ich auch haben...

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className,
            IBinder service) {
        mService = IWallpaperRemote.Stub.asInterface(service);
        isBound = true;
        Log.i("WidgetServiceConnection", "binding to service succeeded");
    }

    public void onServiceDisconnected(ComponentName className) {
        mService = null;
        isBound = false;
        Log.i("WidgetServiceConnection", "binding to service lost!");
    }
};

Meine Frage ist: Hat jemand schon einmal erfolgreich getan, die einen remote-Aufruf von einem widget in eine andere Anwendung? Bedenkt, ich Rede ein live wallpaper ist hier, und die Tatsache, dass ich bin nicht daran interessiert, den Aufruf einer Aktivität innerhalb des widget-Prozess, aber die Ursache Funktionsaufrufe in der live-wallpaper, welche Möglichkeiten habe ich, andere als die IPC, wenn überhaupt?

Und wenn die IPC ist der Weg zu gehen hier, was mache ich falsch?

  • ~ "Sie sind in der gleichen APK, aber offensichtlich unterschiedlichen Prozessen." Sie absolut nicht brauchen, um separate Prozesse, wenn Sie in der gleichen APK!
  • AFAIK kann man nicht ein widget haben auch eine live-Tapete. Wie soll das funktionieren?
InformationsquelleAutor Toumal | 2011-01-11
Schreibe einen Kommentar