1

我想通过 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;

在 Android 的 StatusBarManagerService 中,我扩展了这个接口,因为我在这个线程中读到了这样做:Android 远程服务回调,如下所示:

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;

我错过了什么。我必须写一个.javaIStatusBarLostFocusCallback?如果是这样,里面应该有什么?

4

2 回答 2

1

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

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

你试试像这样描述

如果是,并且这不起作用,您可以像这样实现来自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();
于 2013-10-15T11:23:27.777 回答