同前一篇文章类似,此文旨在简单介绍一下如何在 java层添加自己的服务,相关的理论网上已经有很多文章,在此不在详述。
Java层服务顾名思义即为从 Java层提供的服务,它与 C++层的服务不同之处在于其服务进程的运行由系统( ServiceManager)统一维护。在文件 frameworks /base /services /java /com /android /server /SystemServer.java 中我们可以看到以下代码:
AlarmManagerService alarm = new AlarmManagerService (context );
ServiceManager .addService (Context .ALARM_SERVICE , alarm );
这个操作在系统启动时完成,由 ServiceManager 负责创建服务进程并运行之。所以我们要做的事就是实现一个 java 服务,并将其添加到这里并由系统运行起来,以下是具体实现步骤:
实现自己的 java层 service
1. 在目录
frameworks/base/core/java/android/os中增加自己的 AIDL文件用来申明服务:
BelyService.aidl:
package android.os;
interface IBelyService {
/**
*
*/
int calculateSqu(int value);
}
2. 在目录
frameworks/base/services/java/com/android/server增加 service的实现文件:
BelyService.java:
package com.android.server;
import android.content.Context;
import android.os.IBelyService;
public class BelyService extends IBelyService.Stub {
public BelyService(Context context){
super();
}
public int calculateSqu(int val){
return val*val;
}
}
3. 将 java服务添加到 ServiceManager中:
BelyService bs = new BelyService(context);
ServiceManager.addService("BelyService", bs);
自此,重新编译 Android并运行,我们所创建的服务即可访问,下面是演示如何调用:
同样在 package/apps下任意创建一个应用,调用服务的方法如下:
import android.os.ServiceManager;
import android.os.IBelyService;
IBelyService bs = IBelyService.Stub.asInterface(ServiceManager.getService("BelyService"));
int ret = bs.calculateSqu(9);
上面我们使用的是 Android内部的方法来获取服务,当然也可以使用公开的 API: context.getSystemService来获取。
谢谢!
分享到:
相关推荐
在Android开发中,蒙层效果(Mask Effect)是一种常见的视觉设计元素,用于创建半透明覆盖层,常用于引导页、加载界面或者对话框等场景,为用户提供更好的交互体验。本篇将详细介绍Android蒙层效果的实现及其在引导...
在Android系统中添加以太网(Ethernet)功能是一项涉及到网络接口和系统服务集成的重要操作。在Android设备上,以太网通常用于提供稳定的有线网络连接,尤其在没有Wi-Fi或者无线信号不稳定的情况下。以下是对如何在...
在Android平台上进行Java开发时,CAN(Controller Area Network)通信是一种常见的硬件接口技术,用于设备间的实时数据交换,尤其在汽车电子系统、自动化设备和工业控制等领域应用广泛。本示例"android java 开发can...
本示例着重探讨如何从Android JNI层回调到Java层,这对于实现性能优化、利用现有C/C++库或处理特定硬件功能时非常有用。 首先,我们来理解JNI的基本概念。JNI是Java平台的一部分,它提供了一个框架,让Java代码能够...
总结来说,Qt for Android调用Java代码涉及Java层的JNI接口设计、C++的JNI实现以及Qt应用的调用逻辑。通过以上步骤,开发者可以充分利用Qt的C++能力以及Android的Java生态系统,创建出功能丰富的跨平台应用。在实际...
本文将深入探讨如何在Android应用中通过Java接口调用OpenCV 2.4版本,以实现将图片转换为灰度图的功能。 首先,我们需要理解OpenCV的基本概念。OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机...
这个过程涉及到Java API的设计与JNI(Java Native Interface)的使用,以实现Java层与C/C++层的交互。本文将详细介绍如何在Android SDK中添加自定义API,并通过具体的示例来阐述其步骤和注意事项。 首先,我们来看...
在Android应用开发中,java层的代码如果被逆向分析,将变得一览无遗。为了保护代码不被轻易分析,可以使用代码混淆技术。Android开发中常用的代码混淆工具是Proguard。Proguard不仅可以压缩代码,还可以优化、混淆和...
支持的功能如下: PDF 文档安全性设置,画文本、图片、形状、条形码到 PDF,提取 PDF 中的文本/图片,高亮/替换 PDF 文本,合并和拆分 PDF,创建和填充表单,添加页眉页脚到 PDF,添加或删除层,重叠 PDF 页面,添加...
4. 链接库:在Android.mk或CMakeLists.txt中编译本地代码为动态链接库,并在Java层加载。 三、Android系统服务的Native实现 1. 创建Native Service:在Java层创建一个继承自`Service`的类,并声明本地方法。例如,...
这篇教程将指导你在Ubuntu环境下为Android添加一个HAL模块,以访问Linux内核驱动程序,使它们能够相互交互。 首先,我们需要理解HAL的基本结构。在Android的HAL中,硬件模块ID是区分不同硬件服务的标识,例如在示例...
Android应用主要基于Java语言编写,应用框架提供了丰富的API接口权限,允许开发者访问核心系统服务。应用框架层的设计简化了组件间的重用,使得开发者能够充分利用组件功能,并合理地分发组件。Android应用分为核心...
首先,我们需要了解QT的QAndroidJniObject类,它是QT为与Android Java层交互提供的一种工具。QAndroidJniObject允许我们在C++代码中创建和操作Java对象,调用Java方法,从而实现跨语言通信。 1. **环境准备**:确保...
在Android上,由于安全和权限限制,通常需要在Android应用层之上建立一个JNI(Java Native Interface)层,以调用C/C++的RXTX库,从而实现串口操作。 2. **Java串口编程**:在Java中,RXTX库提供了一系列的类和方法...
通过本文的介绍,我们可以看到在Android Framework层进行修改涉及到了JNI层的代码编写、编译配置文件的修改以及Java Framework层的接口声明等多个环节。每一步都需要仔细处理才能确保最终的修改能够顺利地被编译并...
本项目主要关注的是如何使用Java语言,在Android平台上实现基于ArcGIS服务的瓦片地图。ArcGIS是由Esri公司提供的一个强大的地理信息系统,它支持地图的创建、管理和分发。在这个初级实现中,我们将探讨以下几个关键...
这意味着在使用Apollo时,开发者可以定义GraphQL查询并将其转换为Android中的数据类,从而确保了代码的类型安全。这种特性使得错误在编译阶段就能被发现,而不是在运行时,提高了代码的可靠性和稳定性。 Apollo的...
支持的功能如下: PDF 文档安全性设置,画文本、图片、形状、条形码到 PDF,提取 PDF 中的文本/图片,高亮/替换 PDF 文本,合并和拆分 PDF,创建和填充表单,添加页眉页脚到 PDF,添加或删除层,重叠 PDF 页面,添加...
- Android架构:了解Android系统的分层结构,包括Linux内核、硬件抽象层、系统库、应用程序框架和应用程序。 - Activity生命周期:理解并能绘制各个状态间的转换图,如创建、启动、暂停、恢复、销毁等。 - Intent...
### Android系统添加全局快捷键的方法 #### 一、Android中键盘驱动及按键映射机制 在深入了解Android系统中如何实现全局快捷键之前,我们需要先理解Android操作系统中的键盘驱动及其工作原理。 ##### 1. Linux...