Android-Adding SystemService
2011-08-16 17:16
483 查看
This wiki page will demonstrate - "How to add system service to android framework". Example - "Adding a Bluetooth HID service" - taken as reference of understanding.This will also help to add
support for more bluetooth profiles into android framework.
As per the definition given at http://developer.android.com/guide/topics/fundamentals/services.html
A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start
a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle
network transactions, play music, perform file I/O, or interact with a content provider, all from the background.
Register service in SystemServer.java
A service can expose set of functions that can be access by other process/application. Exposed functions are required to be declared in .aidl file at following location
frameworks/base/core/java/android/os/[server].aidl
Rebuild the framework/base or android system.Service is now ready to use by other application/process.
To use service
first get service handle using "ServiceManager.getService()" api
use service handle to call set of functions exposed by service
Below is the sample code to use service.
http://developer.android.com/reference/android/app/Service.html
http://developer.android.com/guide/topics/fundamentals/services.html
http://www.opersys.com/blog/esc-india-2011-wrapup
support for more bluetooth profiles into android framework.
[hide] |
What is service?
As per the definition given at http://developer.android.com/guide/topics/fundamentals/services.htmlA Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start
a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle
network transactions, play music, perform file I/O, or interact with a content provider, all from the background.
Service layer
Create service
1. Add your code to frameworks/base/services/java/com/android/server/ /*TestService.java */ package com.android.server; import android.content.Context; import android.os.Handler; import android.os.ITestService; import android.os.Looper; import android.os.Message; import android.os.Process; import android.util.Log; public class TestService extends ITestService.Stub { private static final String TAG = "TestService"; private TestWorkerThread mWorker; private TestWorkerHandler mHandler; private Context mContext; public TestService(Context context) { super(); mContext = context; mWorker = new TestWorkerThread("TestServiceWorker"); mWorker.start(); Log.i(TAG, "Spawned worker thread"); } public void setValue(int val) { Log.i(TAG, "setValue " + val); Message msg = Message.obtain(); msg.what = TestWorkerHandler.MESSAGE_SET; msg.arg1 = val; mHandler.sendMessage(msg); } private class TestWorkerThread extends Thread{ public TestWorkerThread(String name) { super(name); } public void run() { Looper.prepare(); mHandler = new TestWorkerHandler(); Looper.loop(); } } private class TestWorkerHandler 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 TestWorkerHandler.handleMessage:", e); } } } }
Register service
Register service in SystemServer.java/* * go to function "@Override public void run()" * ........ * Add following block after line "if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {" */ try { Slog.i(TAG, "Test Service"); ServiceManager.addService(“Test”, new TestService(context)); } catch (Throwable e) { Slog.e(TAG, "Failure starting TestService Service", e); }
Expose service
A service can expose set of functions that can be access by other process/application. Exposed functions are required to be declared in .aidl file at following locationframeworks/base/core/java/android/os/[server].aidl
/* * aidl file : frameworks/base/core/java/android/os/ITestService.aidl * This file contains definitions of functions which are exposed by service */ package android.os; interface ITestService { /** * {@hide} */ void setValue(int val); }
Add [service].aidl for build
/* * open frameworks/base/Android.mk and add following line */ ... core/java/android/os/IPowerManager.aidl \ core/java/android/os/ITestService.aidl \ core/java/android/os/IRemoteCallback.aidl \ ...
Rebuild the framework/base or android system.Service is now ready to use by other application/process.
Using service
To use servicefirst get service handle using "ServiceManager.getService()" api
use service handle to call set of functions exposed by service
Below is the sample code to use service.
/* * HelloServer.java */ package com.Test.helloserver; import android.app.Activity; import android.os.Bundle; import android.os.ServiceManager; import android.os.ITestService; import android.util.Log; public class HelloServer extends Activity { private static final String DTAG = "HelloServer"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ITestService om = ITestService.Stub.asInterface(ServiceManager.getService("Test")); try { Log.d(DTAG, "Going to call service"); om.setValue(20); Log.d(DTAG, "Service called succesfully"); } catch (Exception e) { Log.d(DTAG, "FAILED to call service"); e.printStackTrace(); } } }
References
http://developer.android.com/reference/android/app/Service.htmlhttp://developer.android.com/guide/topics/fundamentals/services.html
http://www.opersys.com/blog/esc-india-2011-wrapup
相关文章推荐
- Android-Adding SystemService
- 【Quote】 Android-Adding SystemService
- Android-Adding SystemService
- Android中getSystemService的过程
- Service---android中getSystemService详解
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Android System Property分析(2):property_service
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- android中getSystemService详解
- Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager
- Android getSystemService
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Android开发之getSystemService
- Android 开发之如何保证Service不被杀掉(broadcast+system/app)
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Android增加一个System Service
- 《System Service Call-oriented Symbolic Execution of Android Framework with Applications to...》论文阅读笔记
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- Remote Code Execution as System User on Android 5 Samsung Devices abusing WifiCredService (Hotspot 2
- Android开发之如何保证Service不被杀掉(broadcast+system/app)