Android9.0系统中添加自定义系统服务给APP调用

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

软件平台: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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值