【手写实例】在framework上添加访问硬件驱动的服务

在framework上添加访问硬件驱动的服务

写完了jni现在写调用jni的java服务层代码,jni实现:
https://blog.csdn.net/daoliting5268/article/details/88294352

ok如果我们只是写一个控制开发板上的一个IO口的服务相当简单。
首先文件名,一定要和jni注册时写的服务名一样。
首先服务是在com.android.server包中,先import;
然后建立一个类
public class MydrvService extends IMydrvService.Stub
这个类集成aidl接口实现的接口类,这个后面会讲到。

然后在MydrvService类中实现方法,调用jni方法
没什么好说的,直接贴上代码

package com.android.server;

import android.content.Context; 
import android.os.IMydrvService; 
import android.util.Slog;

public class MydrvService extends IMydrvService.Stub
{
    private static final String TAG = "MydrvService";

    private int mptr = 0;

    MydrvService()
    {
        mptr = init_native();

        if (mptr == 0) {
            Slog.e(TAG, "failed to initialize mydrv service.");
        }

    }

    public void setVal(int val)
    {
        if (mptr == 0) {
            Slog.e(TAG, "mydrv service is not initialized.");
        }

        setVal_native(mptr, val);

    }

    private static native int init_native();
    private static native void setVal_native(int ptr, int val);
}

ok服务写完了,上面IMydrvService.Stub是怎么实现的呢?
其实它是一个服务接口。
现在framework/base/core/java/android/os/下新建一个IMydrvService.aidl文件。
简单的很就是一个接口

package android.os; 
interface IMyfakeService 
{ 
    void setVal(int val); 
    int getVal(); 
}

注意这里的方法就是暴露给应用的,我们要在服务中具体实现这些方法的内容。
然后在framework/base/core目录下的Android.mk文件中添加此aidl接口。
系统会为此接口实现接口类:IMydrvService.Stub。

ok,服务已经写好了,那怎么让服务加载在服务层呢,就是怎么让服务运行起来呢?
那我们就要在Android启动的时候加载服务,在SystemServer.java中添加:

            try{
                Slog.i(TAG, "Mydrv Service");
                ServiceManager.addService("Mydrv", new MydrvService());
            } catch (Throwable e){
                Slog.e(TAG, "failure starting Mydrv service");
            }

意思是通过servicemanager把服务加进去,句柄是Mydrv,各进程如果想要调用这个服务就可以通过binder管理servicemanager来索引这个句柄,从而来掉用此服务。

导入系统,启动后你的系统就拥有了你写的服务。哈哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值