Android绑定服务调用接口问题`

时间:2012-06-22 06:58:51

标签: android service interface stub

我在使用接口stub()绑定服务时遇到错误。

这是我的连接代码:

class LogConnection implements ServiceConnection {

    public void onServiceConnected(ComponentName className,
            IBinder boundService) {
        logService = ILogService.Stub.asInterface((IBinder) boundService);
    }

但它不适合我。

logcat的:

06-22 12:17:28.632: I/dalvikvm(1973): Could not find method com.sam.logservice.ILogService$Stub.asInterface, referenced from method com.sam.logclient.LogClientActivity$LogConnection.onServiceConnected
06-22 12:17:28.662: W/dalvikvm(1973): VFY: unable to resolve static method 28: Lcom/sam/logservice/ILogService$Stub;.asInterface (Landroid/os/IBinder;)Lcom/sam/logservice/ILogService;
06-22 12:17:28.662: D/dalvikvm(1973): VFY: replacing opcode 0x71 at 0x0009
06-22 12:17:28.662: D/dalvikvm(1973): VFY: dead code 0x000c-0016 in Lcom/sam/logclient/LogClientActivity$LogConnection;.onServiceConnected (Landroid/content/ComponentName;Landroid/os/IBinder;)V
06-22 12:17:28.702: W/ActivityManager(61): Unable to start service Intent { cmp=com.sam.logclient/com.sam.logservice.ILogService }: not found

修改 我关注以下链接的示例:

Remote Service call

当我在那时调试代码的时候,我发现了同样的事情 职位

  logService = ILogService.Stub.asInterface((IBinder) boundService);

希望你有一些解决方案。

如果您想了解更多有关原因的数据,请与我们联系。

1 个答案:

答案 0 :(得分:0)

在你的代码中,我观察到你为什么要将bindService转换为IBinder,实际上没有必要将它转换为原样传递它。  所以,你的行应该是这样的

  logService = ILogService.Stub.asInterface(boundService);

确保服务写在同一个包中..

扩展服务只是创建接口对象的类

 ILogService.Stub logService = new ILogService.Stub();

并在onBind方法中返回它,如下所示

 @Override
    public IBinder onBind(Intent intent) {
        return logService;
    }

希望这个解释对你有用。