显现:
<service android:name="com.example.MainService" android:process=":main_service"/>
尝试在 Activity 中绑定服务:
public class MainActivity extends Activity {
MainService mMainService;
private boolean mBound;
@Override
protected void onCreate(Bundle savedInstanceState) {
bindService(intentForMainService, mConnection, Context.BIND_AUTO_CREATE)
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
MainService.MainServiceBinder binder = (MainService.MainServiceBinder) service;//HERE IS EXCEPTION
mMainService = (MainService) binder.getService();
mBound = true;
}
public void onServiceDisconnected(ComponentName className) {
mMainService = null;
mBound = false;
}
};
@Override
protected void onStop() {
doUnbindService();
super.onStop();
}
void doUnbindService() {
if (mBound) {
unbindService(mConnection);
}
}
}
Error:
FATAL EXCEPTION: main
Process: com.hos.android, PID: 9001
java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.example.service.main.MainService$MainServiceBinder
at com.example.ui.base.BaseServiceActivity$1.onServiceConnected(MainActivity.java:34)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1335)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1352)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
但是当我删除这个android:process=":main_service"一切正常
步骤#1:写AIDL 文件 https://developer.android.com/guide/components/aidl.html它描述了客户端可以绑定到的服务要导出的接口。为了这个答案的目的,我将调用这个接口Foo
,所以 AIDL 文件将是Foo.aidl
。请注意,如果客户端和服务位于单独的 Android Studio 模块中,则两者都需要相同的Foo.aidl
内容。
步骤#2:扩展您的服务的活页夹Foo.Stub
并重写方法Foo.Stub
,而不是扩展IBinder
.
步骤#3:在您的客户端中onServiceConnected()
,将原始活页夹转换为Foo
实例通过Foo.Stub.asInterface(service)
, and Foo
具有 AIDL 定义的 API 的客户端。
这对示例项目 https://github.com/commonsguy/cw-omnibus/tree/master/Binding/Remote说明了这一点,在我的例子中,客户端和服务位于不同的应用程序中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)