public class HardwareConfigService extends IHardwareConfigService.Stub {
private static final String TAG = "HardwareConfigService";
private static native int HardwareConfig_Init_native();
private static native int Amp_Cmd_native(int cmd, int arg1);
private static native int Mic_Cmd_native(int cmd, int arg1);
private static Context mContext;
///////////////////////////////////// 接口定义部分 ////////////////////////////////
public int Amp_Cmd(int Cmd, int arg1) // <<---- 对外提供的调用的接口
{
int ret = 0;
// 在这里可以对接口做进一步封装
ret = Amp_Cmd_native(Cmd, arg1); // <---- 这里调用 JNI 部分接口
return ret;
}
public int Mic_Cmd(int Cmd, int arg1) // <<---- 对外提供的调用的接口
{
int ret = 0;
// 在这里可以对接口做进一步封装
ret = Mic_Cmd_native(Cmd, arg1); // <---- 这里调用 JNI 部分接口
return ret;
}
};
//-------------------------------------------------------------------------------------
修改同目录下的SystemServer.java文件,在ServerThread::run方法里加入
//-------------------------------------------------------------------------------------
class ServerThread extends Thread {
private static final String TAG = "SystemServer";
private static final String ENCRYPTING_STATE = "trigger_restart_min_framework";
// ... 省略代码
@Override
public void run() {
public class SystemServer {
private static final String TAG = "SystemServer";
// ... 省略代码
public static final void init2() {
Slog.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}
/*************** 完成以上步骤就可以在 android\frameworks\base\services\java 下通过 mm 命令编译了 ***********/
/////////////////////////////////////////////////////////////////////////////////////////////
AIAL:在 frameworks/base/core/java/android/os/ 新建立一个文件 IHardwareConfigService.aidl
/////////////////////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------------------
加入以下内容,以下内容为 服务里面的public接口,即提供给APP使用的接口
//-------------------------------------------------------------------------------------
package android.os;
interface IHardwareConfigService
{
int Amp_Cmd(int Cmd, int arg1);
int Mic_Cmd(int Cmd, int arg1);
}
//-------------------------------------------------------------------------------------
返回到 frameworks/base 修改 Android.mk 文件
//-------------------------------------------------------------------------------------
LOCAL_SRC_FILES += \
core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl \
## 省略
core/java/android/os/IHardwareConfigService.aidl \ ## 增加这一行代码
# Include subdirectory makefiles
public enum enMic_ARGSTYPE // 参数
{
eMIC_ARGS_DISABLE ,
eMIC_ARGS_ENABLE,
eMIC_ARGS_NOT_USER, // 不使用
};
///////////////////////// 麦克风接口实现 ////////////////////////////
/* 获取某些命令是已经使能了还是关闭了 设计此接口是为了应用层更加方便的判断 出错返回 eMIC_ARGS_NOT_USER*/
public enMic_ARGSTYPE Mic_GetCmd(enMic_CMDTYPE Cmd)
{
int index = 0;
// 省略转换代码
index = Mic_Cmd(Cmd, enMic_ARGSTYPE.eMIC_ARGS_NOT_USER.ordinal());
// 省略转换代码
return enMic_ARGSTYPE.eMIC_ARGS_NOT_USER;
}
/* 获取具体的值 出错返回 -1 */
public int Mic_GetData(enMic_CMDTYPE Cmd)
{
int ret = Mic_Cmd(Cmd, enMic_ARGSTYPE.eMIC_ARGS_NOT_USER.ordinal());
// 省略转换代码
return ret;
}
public enMic_CMDTYPE Mic_SetCmd(enMic_CMDTYPE Cmd, enMic_ARGSTYPE Args)
{
int index = 0;
// 省略转换代码
index = Mic_Cmd(Cmd, Args.ordinal());
// 省略转换代码
return enMic_CMDTYPE.eMIC_CMD_ERROR;
}
public int Mic_SetData(enMic_CMDTYPE Cmd, int Args)
{
// 省略转换代码
return Mic_Cmd(Cmd, Args);
}