我正在研究一个在aosp上运行的项目。我向aosp添加了一个系统服务。我使用adb shell" service call"运行此服务。命令成功。在创建服务时,我应用了以下方法。
创建服务后,我写了一个基本的Android应用程序。我想从这个Android应用程序调用此服务。我如何从Android应用程序调用此服务。
答案 0 :(得分:4)
在.aidl接口定义旁边的frameworks/base/core/java/android/os/MySerManager.java
中创建一个服务管理器。
frameworks/base/core/java/android/content/Context.java
搜索像VIBRATOR_SERVICE这样的简单服务,并为每次出现添加MYSER_SERIVCE。
特别添加:public static final String MYSER_SERVICE = "myser";
在frameworks/base/core/java/android/app/SystemServiceRegistry.java
中执行相同操作
确保添加:
import android.os.MySerManager;
registerService(Context.MYSER_SERVICE, MySerManager.class,
new CachedServiceFetcher<MySerManager>() {
@Override
public MySerManager createService(ContextImpl ctx) {
return new MySerManager();
}});
通过构建sdk,可以在AOSP之外使用此服务管理器:https://android.googlesource.com/platform/sdk/+/master/docs/howto_build_SDK.txt
通过从Context获取系统服务,在AOSP中:
MySerManager mySerManager = (MySerManager)getSystemService(Context.MYSER_SERVICE);
答案 1 :(得分:1)
我设法解决了如何从Android应用程序调用系统服务。在编译aosp之后,framework_intermediates文件中的classes.jar被创建为out / target / common / obj / JAVA_LIBRARIES。我将classes.jar添加到我的Android应用程序中,并使用了以下代码。
IBinder binder = ServiceManager.getService("my_service");
IMyService myService = IMyService.Stub.asInterface(binder);
int result = myService.myFunction();