【Quote】 Android-Adding SystemService

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   os   sp   for   

From http://processors.wiki.ti.com/index.php/Android-Adding_SystemService

 

Android-Adding SystemService 

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.

Contents [hide] 
  • 1 What is service?
  • 2 Service layer
  • 3 Create service
  • 4 Register service
  • 5 Expose service
  • 6 Add [service].aidl for build
  • 7 Using service
  • 8 References
  • 9 Support
What is service?

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.

Service layer

Create service
  • 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 location

frameworks/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 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.

/* * 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.html
  • http://developer.android.com/guide/topics/fundamentals/services.html
  • http://www.opersys.com/blog/esc-india-2011-wrapup
Support

For community support join http://groups.google.com/group/rowboat 
For IRC #rowboat on irc.freenode.net

【Quote】 Android-Adding SystemService

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.