У меня есть служба, которая уже связана внешним приложением через AIDL
.
Однако есть некоторые запросы на обслуживание, которые требуют запуска Activity
.Поскольку я не могу позвонить по номеру startActivityForResult
из Службы, я решил связать свою локальную деятельность с этой службой.
(псевдокод) выглядит следующим образом:
class MyService extends Service{
public IBinder onBind(Intent intent){
if (intent.hasExtra("LocalBindingRequest")){
return getLocalBinder();
else {
return getAidlBinder();
}
}
}
class ExternalApp extends Activity{
void someFunc(){
Intent i = new Intent(new ComponentName("com.my.pkg", "com.my.pkg.MyService");
bindService(i, myServiceConnection, Context.BIND_AUTO_CREATE);
}
}
class InternalApp extends Activity{
MyService mService;
void someFunc(){
Intent i = new Intent(new ComponentName("com.my.pkg", "com.my.pkg.MyService")
.putExtra("LocalBindingRequest", true);
bindService(i, myServiceConnection, Context.BIND_AUTO_CREATE);
}
public void onServiceConnected(ComponentName cn, IBinder service){
InternalBinder ib = (LocalBinder)service;
mService = ib.getService();
}
}
Поток выглядит так:
- ExternalApp привязывается к AidlBinder
- ExternalAppвызывает функцию, которая требует, чтобы служба запустила действие
- служба запускает действие
- Внутренняя активность пытается связать
- Я получаю исключение (по-видимому, не достигнув точки останова в
onBind
илиonServiceConnected
)
java.lan.ClassCastException: AidlService не может быть приведен к InternalBinder
Служба не может вернутьсядругой Binder?
Если нет, то что я могу сделать, чтобы передать Результат обратно в MyService, который уже связан?