方法一:
1.在应用中
com.xxx.spi.SPLListener.java/com.xxx.spi.SPIManager.java两个类
SPIManager spiManager = (SPIManager) getSystemService("spiService");
spiListener = new MySPIListener();
spiManager.requestSPIUpdates(spiListener);
2.
需在android.app.ContextImpl.java中添加
private static SPIManager sSPIManager;
else if (SPI_SERVICE.equals(name)) {
return getSPIManager();
}
private SPIManager getSPIManager() {
synchronized (sSync) {
if (sSPIManager == null) {
IBinder b = ServiceManager.getService(SPI_SERVICE);
ISPIManager service = ISPIManager.Stub.asInterface(b);
sSPIManager = new SPIManager(service);
}
}
return sSPIManager;
}
在android.content.Context.java中添加常量
public static final String SPI_SERVICE = "spiService";
3.com.xxx.spi.SPIManager.java
中有ISPIListerner.aidl的实现类ListenerTransport
private class ListenerTransport extends ISPIListener.Stub
ListenerTransport中有应用中注册进来的回调监听器SPIListener
ListenerTransport传给frameworks/base/services/java/com/android/server/SPIManagerrService.java服
务器类,也就是aidl的回调注册,一定是实现ISPIListener.stub的ListenerTransport类
SPIManagerService.java是通过jni调C++文件,其中需要把自己作为c++的回调对象,
在cpp文件中取得SPIManagerService类对象
static { class_init_native(); }初始化回调的方法,这样在cpp文件中就随时可以调class_init_native本地
方法中初始化过的函数。
4.frameworks/base/Android.mk文件中编译ISPIListener.aidl,ISPIManager.aidl两个文件成相应的java文件
frameworks/base/services/jni/Android.mk文件中编译同目录下的
com_android_server_SPIManagerService.cpp文件,注意cpp文件的命名与其对应的SPIManagerService.java
文件的包路径之间的关系。
同目录下的onload.cpp文件中添加
int register_android_server_SPIManagerService(JNIEnv* env);
register_android_server_SPIManagerService(env);
5.
frameworks/base/services/java/com/android/server/SystemServer.java中添加服务,并调服务的
systemReady方法
try {
Slog.i(TAG, "---SPI Manager---");
spiService = new SPIManagerService(context);
ServiceManager.addService("spiService", spiService);
} catch (Throwable e) {
Slog.e(TAG, "---Failure starting spiService Manager---", e);
}
if (spiServiceF != null) spiServiceF.systemReady();
6.
frameworks/base/core/jni/AndroidRuntime.cpp中添加
extern int register_android_server_SPIManagerService(JNIEnv* env);
不确定是不是必须的
方法二:
在systemserver.java中添加自己有make文件创建的包
System.loadLibrary("android_servers");
System.loadLibrary("serialserver");
分享到:
相关推荐
根据描述中的信息,这个问题是由Internet Explorer 7.0的一个已知漏洞引起的。在IE7中,对于某些类型库(TypeLib)的处理存在缺陷,这导致了VB应用程序无法找到正确的ieframe.dll文件路径。具体来说,问题是由于...
总之,"paysys彩票系统asp"是一个结合了支付处理、彩票业务逻辑和用户交互的复杂系统,它利用ASP技术实现了服务器端的动态网页生成,旨在提供高效、安全的在线彩票服务。在设计和实现这样的系统时,开发者需要考虑...
sytem view 安装及资料,是通信原理,无线通信经常用到的仿真软件,软件使用简单,方便!
Windows Sytem Programming
总结,"Face-Detection-and-Recognition-for-Automatic-Attendance-Sytem"项目涵盖从基础的人脸检测到复杂的人脸识别一系列技术,结合Python编程语言实现了一个高效、自动化的考勤系统。这个项目不仅展示了计算机...
VFS是Linux内核的一个核心组成部分,它提供了一层抽象,允许内核支持多种不同的文件系统而无需针对每种文件系统单独编写代码。 **设计目的与优势** - **标准化接口**:VFS定义了一系列标准的API,这些API使得内核...
数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现的。 RAID 的优点是可以充分发挥出多块硬盘的优势,可以提升...
而MiniDos,作为DOS的一个精简版,以其小巧、高效的特点,成为了学习和研究DOS操作系统的经典案例。本文将通过分析MiniDos的源代码,深入探讨其工作原理和设计思路。 1. **DOS操作系统概述** DOS操作系统是基于IBM...
人工智能与分布式专家系统是一个包含了人工智能技术和分布式专家系统理论的宽泛概念。人工智能是计算机科学的一个分支,它企图理解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。分布式...
它提供了一系列的类与接口,帮助开发者获取设备上的系统信息、控制设备行为以及响应各种事件。这些功能覆盖了诸如设置闹钟、监测电池状态、管理电源、监控设备连接状态等多个方面。接下来,我们将详细探讨该命名空间...
数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( 4...
数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。 数据库管理系统(DataBase Management sytem,简称 DBMs)是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和...
数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...
每个子系统代表电力网络中的一个部分,如发电机、调速器、保护设备等,而基本模块则对应电力系统中的物理实体,如电阻、电感、电压源等。 在Simulink模型中,我们需要设置好各个设备的参数,如发电机的额定功率、调...
在这个"lab2"实验中,你可能会接触到更具体的FPGA设计实例,比如一个简单的滤波器或者数字信号处理系统。实验通常会引导你逐步完成上述步骤,通过实践加深对System Generator和FPGA设计的理解。在过程中,你需要注意...
数据库有一个主键id,它以1开头并以1递增,因此每一行都有一个id,例如 第1行的id = 1 第2行的id = 2 第3行的id = 3 逻辑上我已经将数据库分为1000行的段 服务器:所有服务器都有唯一的服务器ID 假设有连接到...
加载.so文件成功后,系统会查找是否存在一个名为JNI_OnLoad()的函数,如果存在,则会调用该函数。通常,开发者可以在这个函数中做一些初始化操作,例如动态注册JNI方法等。需要注意的是,这个函数只会被调用一次,即...
如果"c:\windows\sytem32\ieframe.dl1"存在,则说明未注册,下载此文件双击即可;不存在的话,在网上下载后放到c:\windows\sytem32\ 目录下,下载此文件双击即可。