系统服务实际上是调用了远程Bind对象进行操作
1:添加aidl文件到 framworks/base/core/java/android/hardware/ISerialManager.aidl//这个文件是需要自己现实的
2:编译脚本中添加申明
frameworks/base/Android.mk: core/java/android/hardware/ISerialManager.aidl \
3:Context文件中添加变量
frameworks/base/core/java/android/content/Context.java: public static final String SERIAL_SERVICE = “serial”;
4:添加调用远程服务的文件
frameworks/base/services/java/com/android/server/ SerialService.java//这个文件是需要自己现实的
到frameworks/base/services/java/com/android/server/SystemServer.java:
例如:public class SerialService extends ISerialManager.Stub文件
try {
Slog.i(TAG, “Serial Service”);
// Serial port support
serial = new SerialService(context);
ServiceManager.addService(Context.SERIAL_SERVICE, serial);
} catch (Throwable e) {
Slog.e(TAG, “Failure starting SerialService”, e);
}
}
5:添加注册服务到 frameworks/base/core/java/android/app/ContextImpl.java: 获取SerialManager
import android.hardware.SerialManager;
import android.hardware.ISerialManager;//这两个文件是需要自己现实的
构造方法中传入两个参数 public SerialManager(Context context, ISerialManager service) {
mContext = context;
mService = service;
}
registerService(SERIAL_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(SERIAL_SERVICE);
return new SerialManager(ctx, ISerialManager.Stub.asInterface(b));
}});
接下来就可以通过(SerialManager)getSystemService(Context.SERIAL_SERVICE);来获取SerialManager
原文链接:
https://blog.youkuaiyun.com/weixin_36359110/article/details/117466897