Android HAL 开发 (3)

226 阅读1分钟

图片2.png

 在上一篇文章中我们分析了jni的led service代码,该代码通过调用led的HAL层代码,实现了mokoid_init, mokoid_setOn, mokoid_setOff三个C/C++接口,但是该接口还无法直接提供给java程序使用,因此还需要一段java代码通过jni调用这些操作接口。

下面就介绍java led service 的实现,代码很简单。

framework/base/service/java/com/mokoid/server/LedService.java 


1.  package com.mokoid.server; 

3.  import android.util.Config; 
4.  import android.util.Log; 
5.  import android.content.Context; 
6.  import android.os.Binder; 
7.  import android.os.Bundle; 
8.  import android.os.RemoteException; 
9.  import android.os.IBinder; 
10.  import mokoid.hardware.ILedService; 

12.  public final class LedService extends ILedService.Stub { 

14.  static { 
15.  System.load("/system/lib/libmokoid_runtime.so"); 
16.18.  public LedService() { 
19.  Log.i("LedService""Go to get LED Stub..."); 
20.  _init(); 
21.23.  /* 
24.  * Mokoid LED native methods. 
25.  */ 
26.  public boolean setOn(int led) { 
27.  Log.i("MokoidPlatform""LED On"); 
28.  return _set_on(led); 
29.31.  public boolean setOff(int led) { 
32.  Log.i("MokoidPlatform""LED Off"); 
33.  return _set_off(led); 
34.36.  private static native boolean _init()37.  private static native boolean _set_on(int led)38.  private static native boolean _set_off(int led)39.

首先通过System.load("/system/lib/libmokoid_runtime.so"); 装载上一篇文章介绍的使用C/C++编写的库,由于在

libmokoid_runtime.so中已经把mokoid_init,mokoid_setOn, mokoid_setOff分别映射到了_init, _set_on, _set_off,

所以这里可以直接调用这三个接口并且分别被封装到LedService的构造函数,setOn()和setOff()成员函数中,这样

android的应用程序就可以通过这个类来操作led了。

关注我,每天分享知识干货,你要的,我都有~~~