软件平台:Android9.0
硬件平台:Mtk8175
近日开发了一个产品需求,APP端需要控制硬件LED灯,由于是多个APP需要调用,固计划将控制接口做成System Service级别的服务,APP可以通过跨进程调用相关的方法,话不多说,开干:
1、在frameworks/base/core/java/android/app/目录添加aidl接口文件,内容如下:
/**
* Lamp brightness controller
*/
package android.app;
interface IGeninLampManager {
String getLampBrightness();
void setLampSwitch(boolean switchOn);
void setLampBrightness(int brightness);
void setLampMode(int mode);
}
2、将该文件引入mk编译:
diff --git a/Android.bp b/Android.bp
index 282206126bc..1c2dadd6624 100644
--- a/Android.bp
+++ b/Android.bp
@@ -105,6 +105,7 @@ java_library {
"core/java/android/app/usage/ICacheQuotaService.aidl",
"core/java/android/app/usage/IStorageStatsManager.aidl",
"core/java/android/app/usage/IUsageStatsManager.aidl",
+ "core/java/android/app/IGeninLampManager.aidl",
":libbluetooth-binder-aidl",
"core/java/android/content/IClipboard.aidl",
"core/java/android/content/IContentService.aidl",
3、创建注册系统级服务:
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 149af262441..4e016d92adb 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -31,6 +31,7 @@ import android.app.usage.IUsageStatsManager;
import android.app.usage.NetworkStatsManager;
import android.app.usage.StorageStatsManager;
import android.app.usage.UsageStatsManager;
+import android.app.GeninLampManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothManager;
import android.companion.CompanionDeviceManager;
@@ -1002,6 +1003,16 @@ public final class SystemServiceRegistry {
}
});
+ registerService(Context.LAMP_MANAGER_SERVICE, GeninLampManager.class,
+ new CachedServiceFetcher<GeninLampManager>() {
+ @Override
+ public GeninLampManager createService(ContextImpl ctx) {
+ IBinder b = ServiceManager.getService(Context.LAMP_MANAGER_SERVICE);
+ IGeninLampManager service = IGeninLampManager.Stub.asInterface(b);
+ return new GeninLampManager(ctx, service);
+ }});
+
+
registerService(Context.SLICE_SERVICE, SliceManager.class,
new CachedServiceFetcher<SliceManager>() {
@Override
4、在frameworks/base/core/java/android/app/目录创建GeninLampManager.java
/**
* Lamp brightness controller
*/
package android.app;
import android.content.Context;
import android.os.RemoteException;
import android.util.Slog;
public class GeninLampManager {
Context mContext;
IGeninLampManager mService;
static final String TAG = "GeninLampManager";
public GeninLampManager(Context context, IGeninLampManager service) {
mContext = context;
mService = service;
if (mService != null)
Slog.d(TAG, " mService not null");
}
public String getLampBri

这篇博客详细记录了在Android9.0系统中,如何为硬件LED灯创建一个SystemService级别的服务,包括添加AIDL接口、注册服务、实现服务实体类、修改Selinux规则等步骤,以便于多个APP跨进程调用控制LED灯。
最低0.47元/天 解锁文章
898

被折叠的 条评论
为什么被折叠?



