android7.0如何自定义添加系统服务

本文介绍了如何在Android 7.0框架层添加一个自定义系统服务,以实现语音唤醒功能。通过编写和声明aidl文件、实现AIManagerService、注册服务,并修改权限,确保服务正常启动。最后,通过反射调用服务,为应用提供接口。
摘要由CSDN通过智能技术生成

由于项目需要,我这边需要在framework层增加一个语音唤醒服务来实现拉通hal层以及android应用层,实现语音黑屏唤醒以及亮屏唤醒的功能,这里我们只看在android7.0和9.0上是怎么增加一个自定义系统服务,其实对着葫芦画瓢就可以了。

下面主要说基于android7.0的添加系统服务,9.0的编译方式改了,改下bp文件就可以了,没什么大的区别,这里删了些复杂的接口,只留了几个比较简单的接口,方便阅读。

1.编写与声明aidl文件

1.1.编写aidl文件

在frameworks/base/core/java/android/新增ovum/ai/IAIManager.aidl文件

package android.ovum.ai;
/**
* {@hide}
*/
interface IAIManager {
    byte[] getAudioData();
    int getWakeupDoa();
    void stopAudioData();
    void wakeupAppStarted(String callerPackage);
    boolean setEnabled(boolean enabled, String callerPackage);
    boolean isEnabled(String callerPackage);
    boolean isRecording(String callerPackage);
}
1.2.注册aidl文件

实现完成后需要在frameworks/base/Android.mk 声明我们需要的aidl文件,这个经常忘记了。

core/java/android/ovum/ai/IAIManager.aidl \
core/java/android/ovum/performanceobserver/IPerformanceObserverService.aidl \

1.3.封装aidl的接口实现

实现AIManager的接口封装

package android.ovum.ai;

import android.content.Context;
import android.os.RemoteException;
import android.util.Log;

/**
 * {@hide}
 */
public class AIManager {
    private static final String TAG = "AIManager";

    private final Context mContext;
    private final IAIManager mService;

    public AIManager(Context context, IAIManager service) {
        Log.v(TAG, "AIManager()");
        mContext = context;
        mService = service;
    }

    public void stopAudioData() {
        try {
            mService.stopAudioData();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    public int getWakeupDoa() {
        try {
            return mService.getWakeupDoa();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public byte[] getAudioData() {
        try {
            return mService.getAudioData();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void wakeupAppStarted() {
        try {
            mService.wakeupAppStarted(mContext.getOpPackageName());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
    public boolean setEnabled(boolean enabled) {
        try {
            return mService.setEnabled(enabled, mContext.getOpPackageName());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean isEnabled() {
        try {
            return mService.isEnabled(mContext.getOpPackageName());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean isRecording() {
        try {
            return mService.isRecording(mContext.getOpPackageName());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        return false;
    }


}

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值