1

Android のシステム サービスを介して Listener を渡したい。AIDL を使用してリスナー インターフェースを作成しました。

IStatusBarLostFocusCallback.aidl の内容:

package com.android.internal.statusbar;

interface IStatusBarLostFocusCallback {
  void onLostFocus();
}

次に、次の関数で Android の ISt​​atusBarService.aidl を拡張しました。

void setStatusBarLostFocusCallback(in IStatusBarLostFocusCallback listener);

また、私のインターフェースを(同じディレクトリに)インポートしました

import com.android.internal.statusbar.IStatusBarLostFocusCallback;

Androids StatusBarManagerService では、この Thread: Android remote service callbacks like thisでこれを行うことを読んだので、このインターフェイスを拡張しました。

public interface StatusBarLostFocusCallback extends IStatusBarLostFocusCallback {
    public void onLostFocus();
}

setStatusBarLostFocusCallbackここで、で定義IStatusBarService.aidlおよび実装されている でリスナーを設定したいと思いStatusBarManagerService.javaます。

ただし、フレームワークをコンパイルしようとすると、次のエラーが発生します

out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/statusbar/IStatusBarService.java:287: cannot find symbol
symbol  : class IStatusBarLostFocusCallback
location: package com.android.internal.statusbar
com.android.internal.statusbar.IStatusBarLostFocusCallback _arg0;

私は何を逃したのですか。に を書く必要が.javaありIStatusBarLostFocusCallbackますか? もしそうなら、そこには何がありますか?

4

2 に答える 2

1

私は今それを管理しました。AIDL をビルド インに追加するのを忘れていました/frameworks/base/Android.mk(ソースをビルドしていることを忘れていました)。インターフェイスを拡張しなくなりましたが、次のように実装します。

mBarService.setStatusBarLostFocusCallback(new IStatusBarLostFocusCallback.Stub(){
    public void onLostFocus(){
        mHasStatusbarFocus = false;
    }
});
于 2013-10-15T12:56:35.633 に答える