私はウィジェットからライブ壁紙をリモートコントロールしようとしています。彼らは同じAPKに入っていますが、明らかに異なるプロセスです。ライブ壁紙の「活動」を呼び出すことは、別のプロセスであるため、ほとんど役に立たない。ウィジェットには簡単なボタンがあり、押すと、ウィジェット/ローカルサービスからAndroidリモートサービス(IPC)を呼び出すにはどうすればいいですか?
私はIPCとAIDLが必要です。
私は壁紙側にAIDLを作成しましたが、うまくいきました。余分なパラメータを持たない3つの方法があります。しかし、クライアント側をウィジェットに追加すると、ウィジェットがすでにブロードキャスト・リスナーであるため、リモート・インターフェースにバインドできないというエラーが表示されます。私は、WidgetをBroadcastListenerにする必要なく、ボタン操作を取得しようとしましたが、これは不可能なようです。
問題はありません。ウィジェットがブロードキャスト・リスナーである一方、サービスはそうではなく、すべてがうまくいくはずなので、リモート・インターフェースにバインドするサービスをウィジェット内に作成しました。
そう思った。
さて、私はウィジェットのボタンを取得してウィジェットサービスを起動しています。リモートサービスにバインドすると、次の警告が表示されます。
サービスを開始できませんでした。Intent(act = com.blabla.IRemoteService):見つかりません。
私はリモートスタッフにバインドするためにウィジェットのサービス内でgetApplicationContext()を使用しています。マニフェストにウィジェットサービスがありますが、そこにリモートサービスはありません。私がそこに置くと、私は非特異的なInstantiationExceptionを取得します。ウィジェットのサービスONSTART()で
は、私はこれをやっている:getApplicationContext().bindService(new Intent(IWallpaperRemote.class.getName()),
mConnection, Context.BIND_AUTO_CREATE);
私も持っている...
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!");
}
};
私の質問はこれです:誰もが今までに成功し、リモート呼び出しからを行っています別のアプリケーションへのウィジェットですか?私はここでライブ壁紙について話していると思いますし、ウィジェットプロセス内でアクティビティを呼び出すことに関心がなく、ライブ壁紙内で関数呼び出しを行うことに興味があるという事実を考えれば、IPC以外のオプションはありますか?
ここに行く方法がIPCなら、どうしたらいいですか?
〜 "彼らは同じAPKに入っていますが、明らかに異なるプロセスです。"同じAPKにいる場合は、別々のプロセスにする必要はありません。 –
AFAIKでは、ウィジェットをライブ壁紙にすることはできません。これはどのように機能しますか? – Toumal