AIDL找不到自定义声明接口

时间:2013-10-15 10:44:27

标签: android aidl

我想通过Android中的系统服务传递监听器。我使用AIDL创建了我的监听器接口。

IStatusBarLostFocusCallback.aidl的内容:

package com.android.internal.statusbar;

interface IStatusBarLostFocusCallback {
  void onLostFocus();
}

然后我使用以下函数扩展了Androids IStatusBarService.aidl:

void setStatusBarLostFocusCallback(in IStatusBarLostFocusCallback listener);

并导入我的界面(在同一目录中)

import com.android.internal.statusbar.IStatusBarLostFocusCallback;

在Androids StatusBarManagerService中,我扩展了这个接口,因为我在这篇文章中读到了这样做:Android remote service callbacks,如下所示:

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

现在,我想将监听器设置为setStatusBarLostFocusCallbackIStatusBarService.aidlStatusBarManagerService.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; 中实现。

但是,当我尝试编译Framework时,出现以下错误

.java

我错过了什么。我是否必须为IStatusBarLostFocusCallback撰写{{1}}?如果是这样,那应该是什么?

2 个答案:

答案 0 :(得分:1)

您的尝试如this

所述

如果是,并且这不起作用,您可以像这样从aidl实现方法,例如:

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

Class aClass = Class.forName(telephonyManager.getClass().getName());

Method method = aClass.getDeclaredMethod("getITelephony");
method.setAccessible(true);

ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.endCall();

答案 1 :(得分:1)

我现在管理它。我忘了将我的AIDL添加到/frameworks/base/Android.mk中的Build(我忘了提到我正在构建Source)。 我现在不再扩展接口,而是像这样实现它:

mBarService.setStatusBarLostFocusCallback(new IStatusBarLostFocusCallback.Stub(){
    public void onLostFocus(){
        mHasStatusbarFocus = false;
    }
});