新增一个自定义的系统服务,并尝试在SystemUI中调用自定义service
一、新建相关文件以及定义服务的注册与启动
1.新建aidl文件
到android8.1/frameworks/base/core/java/android 目录下,可以看到app文件夹,目录下是aidl服务接口文件和对应的服务管理类。 可以将自定义的aidl文件放在这个目录里。
本文在android8.1/frameworks/base/core/java/android目录下新建了chenzqTest文件夹,方便管理自定义内容。
android8.1/frameworks/base/core/java/android/chenzqTest 目录下 新增ITestService.aidl文件。
package android.chenzqTest;
interface ITestService {
void log(); //因为只是个测试,所以就写一个无参的log方法
}
2. 同目录下新建管理类 TestManager.java
package android.chenzqTest;
import android.os.RemoteException;
import android.content.Context;
import android.os.ServiceManager;
import android.util.Log;
public class TestManager {
private ITestService mService;
public TestManager(Context ctx ){
mService =ITestService.Stub.asInterface(ServiceManager.getService("test-service"));//获取ITestService实例
}
public void log ()throws RemoteException{
mService.log();
}
}
记得抛异常
注意这个包名“android.chenzqTest”
3.新建aidl实现类
一般把实现类放在android8.1/frameworks/base/core/java/com/android/server 目录下
在android8.1/frameworks/base/core/java/com/目录下 新建chenzqTest/server目录
android8.1/frameworks/base/core/java/com/chenzqTest/server目录下,新建TestServiceImpl.java继承ITestService.Stub
package com.chenzqTest.server;
import android.os.RemoteException;
import android.util.Log;
import android.chenzqTest.ITestService;
public class TestServiceImpl extends ITestService.Stub {