Я пытаюсь удаленно управлять живыми обоями с помощью виджета. Они находятся в одном APK, но, очевидно, в разных процессах. Вызов "активности" живых обоев мне мало, так как это другой процесс. Виджет имеет простые кнопки, которые при нажатии
Так что (я думаю) мне нужны IPC и AIDL.
Сначала я создал AIDL на стороне обоев, который работал нормально. У него есть три метода без дополнительных параметров. Но когда я добавил клиентскую часть к виджету, я получил сообщение об ошибке, в котором говорилось, что я не могу подключиться к этому удаленному интерфейсу, потому что виджет уже является BroadcastListener. Я попытался включить обработку кнопок, не требуя, чтобы виджет был BroadcastListener, но это оказалось невозможным.
Нет проблем, верно? Я только что создал в виджете службу, которая привязывается к удаленному интерфейсу, потому что, хотя виджет является BroadcastListener, служба - нет, и все должно быть в порядке.
По крайней мере, я так думал.
Ну, я получаю виджет ' s кнопки для запуска службы виджетов. При привязке к удаленной службе появляется следующее предупреждение:
Невозможно запустить службу Intent (act = com.blabla.IRemoteService): not found.
Я использую 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 - лучший вариант, что я делаю не так?