我想通过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();
}
现在,我想将监听器设置为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;
中实现。
但是,当我尝试编译Framework时,出现以下错误
.java
我错过了什么。我是否必须为IStatusBarLostFocusCallback
撰写{{1}}?如果是这样,那应该是什么?
答案 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;
}
});