Search code examples
androidandroid-serviceandroid-sourceandroid-build

make getSystemService() recognize our new system service


I'm using the book "Embedded Android".

I'm making a new System Service using AOSP(4.0.3_r1).
I want my system service to be registered in frameworks/base/core/java/android/content/app/ContextImpl.java so that I can use it through getSystemService() method.

The problem is, I can't find the app folder under content:
androidroot/frameworks/base/core/java/android/content/app/ContextImpl.java
But, I found it in:
androidroot/frameworks/base/core/java/android/app/ContextImpl.java

Are these 2 files the same? or is it just missing(the content/app folder)?
Any idea on what to do?


Solution

  • Karim wrote his book mostly orienting on Android 2.3.4 version. Something can be changed from this time. This is an example what has been changed.

    Are these 2 files the same? or is it just missing(the content/app folder)?

    These are the same files.

    Any idea on what to do?

    As I said the implementation has been changed. I looked into the code and here what you can change to make your code working (I can only suppose because I did not actually build my code). In the static block of ContextImpl class you need to add the following code:

    registerService(ACCOUNT_SERVICE, new ServiceFetcher() {
        public Object createService(ContextImpl ctx) {
            IBinder b = ServiceManager.getService(OPERSYS_SERVICE);
            IOpersysService service = IOpersysService.Stub.asInterface(b);
            return new OpersysManager(service);
        }});