对于应用程序访问jni库,是可以直接访问,即写个active,然后调用System.load函数,jni库加载进来,然后直接调用其中的api函数,从而实现操作硬件功能。但这不是android所规范的作法。
一般来说在framework写一些中间东西,我们称之为服务service。
关于android中的服务概念在android应用程序编写教程中,都会提及到,其中都提到服务的生命周期,此处不详细展开。
接下就着重点放在这个服务的实现上。
1 gpio serviced
在service目录下创建framework/service/java/com/ask/serviced/目录,即
cd framework
mkdir -p service/java/com/ask/serviced
再创建serviced.java文件,文件名应该就是类名。
内容如下:
package com.ask.server; //生成的包名为com.ask.server
import android.util.Config;
import android.util.Log;
import android.content.Context;
import android.os.Binder;
import android.os.Bundle;
import android.os.RemoteException;
public final class serviced
{
static
{
System.load("/system/lib/libaskgpio.so"); //加载jni库文件
}
public serviced()
{
Log.i("GpioService", "Go to get Gpio Stub...");
_gpio_init();
}
/*
* Ctop Gpio native methods.
*/
public boolean GpioSet(int gpio)
{
Log.i("AskPlatform", "Gpio set");
return _gpio_set(gpio);
}
public boolean GpioClr(int gpio)
{
Log.i("AskPlatform", "Gpio clr");
return _gpio_clr(gpio);
}
private static native boolean _gpio_init();
private static native boolean _gpio_set(int gpio);
private static native boolean _gpio_clr(int gpio);
}
其中:
private static native boolean _gpio_init();
private static native boolean _g
android分层学习笔记(三)
最新推荐文章于 2024-03-24 17:29:26 发布
这篇博客详细介绍了如何在Android中通过Service和JNI来实现对GPIO的控制。首先,讲解了直接通过JNI库访问硬件的方法,然后阐述了Android规范的服务Service的使用,包括创建Service、声明JNI函数以及加载库文件。接着,提到了使用Service Manager调用管理Service的更佳实践,涉及到AIDL接口的定义。最后,展示了GpioManager和GpioService的Java代码实现,并给出了相应的Android.mk文件内容。
摘要由CSDN通过智能技术生成