0

フレームワーク レベルで MediaPlayback サービス (音楽アプリで実現) を使用したいのですが、手順は次のとおりです。

/frameworks/base/core/java/com/android に基づいて、これらのコードを Java ファイルに追加しました (同じディレクトリに IMediaPlaybackService.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) {
    } 
}

サービスが正常にバインドされ、mMediaPlaybackService の値が修正されましたが、ボタンをクリックしてステートメント「mMediaPlaybackService.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 の使い方を簡単に説明していただけると助かります。

4

1 に答える 1

0

私はこの問題を自分で修正しました。重要なのは、正しい場所へのコピー補助です。パッケージ com.android.internal.widget(frameworks/base/core/java/com/android/internal/widget) にクライアント コードを追加したいのですが、aidl のパッケージは com.android.music なので、IMediaPlaybackService をコピーする必要があります。 aidl を frameworks/base/core/java/com/android/music/IMediaPlaybackService.aidl に追加し (同じ Java ファイルが生成されることを確認してください)、frameworks/base/Android.mk の LOCAL_SRC_FILE への aidl パスを追加します (これを確認してください)。ファイルがコンパイルされます)。

于 2012-09-12T03:23:00.653 に答える