Android添加一个系统service

指定一个接口

该例使用了AIDL,因此第一步添加一个接口定义文件。

frameworks/base/core/java/android/os/IEneaService.aidl
package android.os;
interface IEneaService {
/**
* {@hide}
*/
void setValue(int val);
}
这个文件将被添加到系统build文件中:
frameworks/base/Android.mk
添加下面的内容在 165行 ( SRC_FILES列的末尾 ):
core/java/android/os/IEneaService.aidl
实现服务器端
服务产生一个工作线程作为系统服务器进程的一部分,将做的一切工作。由于服务是由系统服务创建的,它会需要到系统服务可以找到它的位置。
frameworks/base/services/java/com/android/server/EneaService.java
package com.android.server;
import android.content.Context;
import android.os.Handler;
import android.os.IEneaService;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;
public class EneaService extends IEneaService.Stub {
private static final String TAG = “EneaService”;
private EneaWorkerThread mWorker;
private EneaWorkerHandler mHandler;
private Context mContext;
public EneaService(Context context) {
super();
mContext = context;
mWorker = new EneaWorkerThread(“EneaServiceWorker”);
mWorker.start();
Log.i(TAG, “Spawned worker thread”);
}
public void setValue(int val)
{
Log.i(TAG, “setValue ” + val);
Message msg = Message.obtain();
msg.what = EneaWorkerHandler.MESSAGE_SET;
msg.arg1 = val;
mHandler.sendMessage(msg);
}
private class EneaWorkerThread extends Thread{
public EneaWorkerThread(String name) {
super(name);
}
public void run() {
Looper.prepare();
mHandler = new EneaWorkerHandler();
Looper.loop();
}
}
private class EneaWorkerHandler extends Handler {
private static final int MESSAGE_SET = 0;
@Override
public void handleMessage(Message msg) {
try {
if (msg.what == MESSAGE_SET) {
Log.i(TAG, “set message received: ” + msg.arg1);
}
} catch (Exception e) {
// Log, don’t crash!
Log.e(TAG, “Exception in EneaWorkerHandler.handleMessage:”, e);
}
}
}
}
添加系统服务
services/java/com/android/server/SystemServer.java
try {
Log.i(TAG, “Enea Service”);
ServiceManager.addService(Context. ENEA_SERVICE, new EneaService(context));
} catch (Throwable e) {
Log.e(TAG, “Failure starting Enea Service”,     e);
}
添加常量值到 Context
./core/java/android/content/Context.java
public static final String ENEA_SERVICE = “enea”;
最后
make update-api
make

时间: 2024-10-24 12:32:39

Android添加一个系统service的相关文章

phpcms 2008 sp4的这个版本如何添加一个系统字段

phpcms中可以自定义模型,模型的共同字段在pc_content表中,其它的扩展字段在pc_c_这样的前缀中的表中, 自定义模型的过程如下:自定义一个模型,会使用一组创建表的sql,这个sql存储在include/amdin/model.sql这个文件中 每个字段都有以下属性,issystem,这个属性决定着是在主表还是在附表中,还有formtype这个表示在界面生成html的类型.

android system-安卓系统编译时,system目录下添加一个文件,为何生成的system.img为什么不包含该文件?

问题描述 安卓系统编译时,system目录下添加一个文件,为何生成的system.img为什么不包含该文件? 安卓系统编译时,在system路径下添加了一些文件,但是编译生成的system.img为什么不包含这些文件? 解决方案 http://www.linuxidc.com/Linux/2014-06/103521.htm

Android系统service详解

Android存在3大类service, 处于android系统的不同框架层,具体解读如下: 1) init.rc中的service //关键词"service"  name  二进制可执行程序路径 service servicemanager /system/bin/servicemanager class core user system group system critical onrestart restart healthd onrestart restart zygote

android ViewPage中添加一个腾讯地图

问题描述 android ViewPage中添加一个腾讯地图 View中添加一项ViewPage页面,可以定位地图的空间怎么写?最好是有Demo看一下 解决方案 ViewPager里面嵌入fragment或者其他试图,fragement中设置layout文件,地图都是第三方的,你按照文档中嵌入进来就行了 解决方案二: viewpager里面添加fragment.然后把地图添加到fragment中就行了. 腾讯地图的话,你参考官方文档一步步来就行了. 这个blog可以参考一下:http://blo

Android中如何在maiactivity.java中往布局中添加一个文本编辑框

问题描述 Android中如何在maiactivity.java中往布局中添加一个文本编辑框 怎么从maiactivity.java中往布局中添加一个文本编辑框 EditText et_miyue=new EditText(null); et_miyue.setHint("请输入密钥..."); et_miyue.setSingleLine(true); et_miyue.setAlpha(getWallpaperDesiredMinimumWidth()); et_miyue.set

调用Android自带日历功能(日历列表单、添加一个日历事件)

调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有一个内置的日历应用程序.第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件.这个日历可以直接同步用户的谷歌日历.  不幸的是,没有文档和Android手机的日历应用集成,因为有另外一个联系人应用程序.相反,本文所提供的所有信息,将会通过逆向工程的谷歌日历内容提供商.该接口

objective ...-基于oc的ios开发,如何给一个系统类添加一个属性?

问题描述 基于oc的ios开发,如何给一个系统类添加一个属性? 基于oc的ios开发,如何给一个系统类添加一个属性? 目前我知道可以用继承或类别实现.但不知道哪种方式好 解决方案 用类别: .h文件 #import @interface UIButton (TLButton) @property(nonatomic,strong,readwrite)NSNumber* cityId; @property(nonatomic,strong,readwrite)NSNumber* typeId; @

android ndk-android NDK fork一个守护service的进程保证它被杀后能重新启动

问题描述 android NDK fork一个守护service的进程保证它被杀后能重新启动 java 端启动一个demoService,demoService启动时就会通过AIDL 启动另外一个进程的guardService > android:process="com.gdut.persistentservice.guradService" > </service> public int onStartCommand(Intent intent, int f

android中给view添加一个按着才触发的事件 要一直按着 松开触发功能关闭事件

问题描述 android中给view添加一个按着才触发的事件 要一直按着 松开触发功能关闭事件 如题,android中给view添加一个按着才触发的事件 要一直按着 松开触发功能关闭事件 ,一个图片 按着可以开启录音功能 松开就关闭录音 这个事件怎么添加 解决方案 你需要按下图片的时候开始录音,松开的时候停止录音,可以监听图片的触摸事件,按下的时候开始,抬起的时候结束. 代码如下: view.setOnTouchListener(new OnTouchListener() { @Override