问题是:我想访问我机器里一个MP3播放器的一个Service(没有源码,但我能获取到该Service的包名、类名),想通过这个Service,来开发我自己的一个AppWidget,请问有什么方法没有。。似乎也就是一个跨进程的Service访问。而且,现在我已经bindService()成功了,但现在是对它返回来的一个IBinder对象(onServiceConnected()中获得)没有办法进行类型转换。不然不能进行Service的操作。,有什么办法没有。。

解决方案 »

  1.   

    你要知道他的service是什么类型的才能进行类型转换啊,而且要知道这个service提供了什么方法,什么都不知道就没办法了
      

  2.   

    你至少需要知道这个service的aidl定义。不知道这个就没法做。知道了这个,可以直接定义parcel写到binder中。
      

  3.   

    这个Service不是AIDL形式定义的,其接口我通过反编译,已经获得了。现在它们不认识这个Service类(PlayService),我现在想到的做法是将反编译获得Service类中所有函数都清空,然后拷贝到我自己的工程里面去,还在试,不知道能不能行得通
      

  4.   

    不是AIDL形式的SERVICE是不能IPC的,也就是说别的进程不能调用它
      

  5.   

    可以在Service写个方法返回当前Service
    public class MyBinder extends Binder{
    MyService getService(){
    return MyService.this;
    }
    }
    然后在ServiceConnection转换类型
    myService = ((MyBinder)service).getService();
      

  6.   

    楼上的,就是MyService这个类型不认识啊,因为不是在我这个工程里定义的类
      

  7.   

    如果你能知道接口的具体定义,而且知道接口中方法的顺序,就应该能通过binder来调用。通过transact来实现通讯。binder就是android特有的ipc方式,aidl只不过是简化开发的一个形式。跨进程是肯定没问题的。