`
anson_xu
  • 浏览: 513130 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

Android添加一个系统service

阅读更多

 

Android 添加一个系统service

 

Specifying the interface.

  This example uses aidl, so the first step is to add an interface definition file:

  frameworks/base/core/java/android/os/IEneaService.aidl

  package android.os;

  interface IEneaService {

  /**

  * {@hide}

  */

  void setValue(int val);

  }

  The interface file will need to be added to the build system:

  frameworks/base/Android.mk

  Add the following around line 165 (the end of the list of SRC_FILES):

  core/java/android/os/IEneaService.aidl

  Implementing the server

  The service spawns a worker thread that will do all the work, as part of the system server process. Since the service is created by the system server, it will need to be located somewhere where the system server can find it.

  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);

  }

  }

  }

  }

  Add to the system server

  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);

  }

  Add a constant value to Context

  ./core/java/android/content/Context.java

  public static final String ENEA_SERVICE = "enea";

  最后

  make update-api

  make

 

分享到:
评论

相关推荐

    Android 多个service的action 相同冲突 验证demo

    默认情况下,Android只会启动一个Service,即使有多个Service声明了相同的ACTION。这可能导致某些Service无法正常启动,或者开发者期望的行为没有得到满足。 为了解决这个问题,Android提供了几种策略来处理这种...

    android 通过AccessibilityService实现系统按键监听

    在Android开发中, AccessibilityService 是一个非常重要的服务接口,它允许应用在用户与系统交互时获取到相关的事件,比如点击、触摸屏幕或者按下系统按键。这个功能被广泛应用于辅助功能应用,例如为视力障碍者...

    【Android】开机自启动Service

    为了在开发和测试过程中能够方便地触发BroadcastReceiver,可以创建一个快捷方式或者在MainActivity中添加一个按钮,模拟发送ACTION_BOOT_COMPLETED广播。 总的来说,实现Android开机自启动Service需要以下几个步骤...

    android service 之一 (start service)

    启动Service的方法是调用`Context.startService()`,这个方法会发送一个意图(Intent)到系统,系统再根据Intent找到对应的Service并启动它。 Service的生命周期由四个主要方法构成: 1. `onCreate()`: 当Service首次...

    Android不死Service

    2. **使用BroadcastReceiver**:可以创建一个BroadcastReceiver监听系统ACTION_MY_SERVICE_SHUTDOWN这样的自定义广播,当Service被终止时,发送这个广播,然后在BroadcastReceiver的onReceive()方法中再次启动...

    android如何绑定service

    1. 创建Service类:首先,你需要创建一个继承自`Service`的类,并重写`onBind()`方法,返回一个实现了`Binder`接口的对象,这是客户端与Service交互的桥梁。 ```java public class MyService extends Service { ...

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    【Android studio】service在app直接退出下,整体输出情况,实现开机自启动,一直后台运行

    1. 创建Service: 在Android Studio中,可以通过右键项目 -> New -> Service -> Service来创建一个新Service。默认生成的模板包括`onCreate()`和`onStartCommand()`方法,这两个方法是Service生命周期中的关键点。 2...

    Android 的 Remote Service 开发实例RemoteService

    1. 定义服务接口:在Android项目中创建一个新的AIDL文件,例如`IRemoteService.aidl`,定义服务要暴露的方法。例如: ```aidl package com.example.remoteservice; interface IRemoteService { void doSomething...

    android service 源码

    通过调用`startForeground()`,Service可以显示一个通知并作为前台服务运行,这样系统将优先保证其资源分配,但同时也要求提供持续的通知给用户。 在学习Service源码的过程中,我们还需要关注线程模型,因为Service...

    Android Studio 实现选课系统

    在本项目中,我们使用Android Studio来开发一个选课系统,这是移动应用开发的一个实例,主要针对Android平台。Android Studio是Google提供的一款强大的集成开发环境(IDE),专为Android应用开发设计,它提供了丰富...

    android音乐播放器service学习案例

    在Android开发中,服务(Service)是一个至关重要的组件,它允许应用程序在后台执行长时间运行的操作,即使用户没有与应用交互。本案例“android音乐播放器service学习案例”着重讲解如何利用Service来实现一个音乐...

    Android---Service Timer之执行周期任务

    Service是Android系统中的一个关键组件,它允许应用程序在后台运行,即使用户没有与应用交互。Service常用于执行长时间运行的任务,如播放音乐、同步数据或者执行定时任务等。Service的生命周期包括onCreate(), ...

    android软键盘上添加一个按钮

    在Android开发中,有时我们可能需要在软键盘上添加自定义功能,比如一个搜索按钮或者一个额外的操作选项。这个需求通常出现在输入框交互较多的应用场景,例如聊天应用、搜索引擎等。下面将详细介绍如何在Android的软...

    【Android Demo】Native Service

    在 Android 开发中,Native Service 是一个重要的概念,它允许开发者在原生 C/C++ 代码中实现服务,从而利用底层性能优化和访问硬件资源。本 Demo 旨在展示如何创建和使用 Android 的 Native Service。 首先,我们...

    Android学习之Service开机启动

    - **目的**:创建一个BroadcastReceiver子类,用于监听并响应`android.intent.action.BOOT_COMPLETED`广播。 - **方法**:重写`onReceive`方法,在其中启动想要启动的服务。 **3. 配置AndroidManifest.xml** - **...

    Android Service 实现下载,前台、通知栏同步更新

    在Android应用开发中,Service是用于执行长时间运行操作的一个组件,比如后台下载任务。本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们...

    Android_Service.rar

    在Android应用开发中,Service是不可或缺的一个组件,它在后台执行长时间运行的操作,即使用户界面不在前台也能继续工作。这个名为"Android_Service.rar"的压缩包包含了一个关于Android Service的示例项目,可以帮助...

    通过Messenger实现Android Service更新UI

    在AndroidManifest.xml中,我们需要为Service添加一个<service>标签,并设置一个独特的ACTION,以便其他组件可以通过这个ACTION启动Service。 ```xml <service android:name=".MyService" android:exported="true">...

    android native实现系统服务

    1. 创建Service:在Android应用中,首先需要创建一个Java类继承自`Service`,并重写其中的关键方法,如`onStartCommand()`和`onBind()`。 2. 绑定与启动:服务可以通过`startService()`启动,或者通过`bindService()...

Global site tag (gtag.js) - Google Analytics