我有一个已经通过AIDL
与外部应用程序绑定的服务。
但是,有些服务请求需要启动Activity
。
由于我无法从服务内致电startActivityForResult
,因此决定将本地活动也绑定到该服务。
(PseudoCode)看起来像这样:
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();
}
}
流是这样的:
onBind
或onServiceConnected
中达到断点)java.lan.ClassCastException:AidlService无法强制转换为InternalBinder
服务是否有可能返回其他活页夹?
如果没有,该怎么做,将结果传播回已绑定的MyService?
答案 0 :(得分:0)
好吧,我应该阅读let view model dispatch =
div [ Class "main-container" ]
[ input [ Class "input"
Value model.Value
OnChange (fun ev -> ev.target?value |> string |> ChangeValue |> dispatch) ]
span [ ]
[ str "Hello, "
str model.Value
str "!" ]; str "Goodbye!" ]
中的文档
Intent:用于绑定到此服务的Intent,如 Context.bindService。请注意, 此时的意图不会在这里显示。
这就是为什么我得到了Aidl服务。解决方法是:
onBind(Intent)
我们可以为每个绑定请求使用单独的绑定器