使用远程服务通信时出现问题(在android框架级别使用IMediPlayBackService)

使用远程服务通信时出现问题(在android框架级别使用IMediPlayBackService),android,ipc,aidl,Android,Ipc,Aidl,我想在框架级别使用MediaPlayback服务(在音乐应用程序中实现),步骤如下: 在基于/frameworks/base/core/java/com/android的java文件中添加了这些代码(也在同一目录中添加了imediplaybackservice.aidl): private IMediaPlaybackService mMediaPlaybackService = null; private boolean isServiceConn = false; private Servi

我想在框架级别使用MediaPlayback服务(在音乐应用程序中实现),步骤如下:

在基于/frameworks/base/core/java/com/android的java文件中添加了这些代码(也在同一目录中添加了imediplaybackservice.aidl):

private IMediaPlaybackService mMediaPlaybackService = null;
private boolean isServiceConn = false;
private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        mMediaPlaybackService = IMediaPlaybackService.Stub.asInterface(service);
        isServiceConn = true;
    }

    public void onServiceDisconnected(ComponentName className) {
    }
};

public void funcXXX() {
    ...

    if(isServiceConn == false) {
        mContext.bindService(new intent("com.android.music.MediaPlaybackService"), mConnection, Context.BIND_AUTO_CREATE);
    }

    ...
}

public void onClick(View v) {
    try {
        mMediaPlaybackService.prev();// play previous track
    } catch(RemoteException ex) {
    } 
}
服务已成功绑定,并且已更正mmediplaybackservice的值,但当我单击按钮并执行语句“mmediplaybackservice.prev()”时,程序将崩溃,logcat转储为:

E/AndroidRuntime(  259): java.lang.SecurityException: Binder invocation to an incorrect interface
E/AndroidRuntime(  259):    at android.os.Parcel.readException(Parcel.java:1327)
E/AndroidRuntime(  259):    at android.os.Parcel.readException(Parcel.java:1281)
E/AndroidRuntime(  259):    at com.android.internal.widget.IMediaPlaybackService$Stub$Proxy.prev(IMediaPlaybackService.java:457.
请指出这里可能出现的问题,我们将非常感谢您的帮助。
如果您简要说明如何使用bindService或IPC,也会很有帮助。

我自己解决了这个问题。关键是将aidl复制到正确的位置。 我想在包com.android.internal.widget(frameworks/base/core/java/com/android/internal/widget)上添加客户端代码,而aidl的包是com.android.music,所以我们需要将imediplaybackservice.aidl复制到frameworks/base/core/java/com/android/music/imediplaybackservice.aidl(确保它会生成相同的java文件),然后将aidl路径添加到frameworks/base/Android.mk中的本地_SRC_文件中(确保该文件将被编译)