Android 源码中添加自定义服务并提供给上层使用

定义自定义系统服务接口(aidl)

添加Manager文件供应用层调用

添加aidl到编译脚本(./framework/base/Android.mk)

实现添加的服务(service.java)

注册到SystemServer(registerService())

一般系统服务的aidl文件都放在framework\base\core\java\android\os目录中。

/home/sunming/androidsource/android-6.0.1_r72/frameworks/base/core/java/android/app中添加aidl,manager文件

=====aidl文件=========
package android.app;
interface ISystemStatusManager{
    String[] getSystemStatus();
}
=======manager文件提供给app层使用=================
package android.app;

import android.content.Context;
import android.os.RemoteException;
import android.util.Slog;

public class SystemStatusManager {
    Context mContext;
    ISystemStatusManager mService;
/**/
    public SystemStatusManager(Context context, ISystemStatusManager service) {
        mContext = context;
        mService = service;
    }

    public String[] getSystemStatus() {
        if (mService != null) {
            try {
                return mService.getSystemStatus();
            } catch (RemoteException e) {
                Slog.e("SystemStatus", "RemoteException " + e);
                return null;
            }
        }

        return null;
    }
}
===========在Context中添加常量==================

SYSTEM_STATUS_SERVICE
===========SystemServiceRegistry 添加服务=======
//this is add by sunming
registerService(Context.SYSTEM_STATUS_SERVICE,SystemStatusManager.class,
        new CachedServiceFetcher<SystemStatusManager>(){
            @Override
            public SystemStatusManager createService(ContextImpl ctx) {
                IBinder b=ServiceManager.getService(Context.SYSTEM_STATUS_SERVICE);
                ISystemStatusManager service=ISystemStatusManager.Stub.asInterface(b);
                return new SystemStatusManager(ctx.getOuterContext(),service);
            }
        }
);

===================Android.mk文件中添加aidl文件位置============================
LOCAL_SRC_FILES += \
core/java/android/app/ISystemStatusManager.aidl \

=================添加service文件========================

package com.android.server;

import android.app.ISystemStatusManager;
import android.content.Context;
import android.os.Build;
import android.util.Slog;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SystemStatusManagerService extends ISystemStatusManager.Stub {
    private Context mContext;

    public SystemStatusManagerService(Context context) {
        mContext = context;

        Slog.d("SystemStatus", "Date:" + getDateTime() + "\nVersion:" + getVersion());
    }

    @Override
    public String[] getSystemStatus() {
        String[] infos = new String[2];

        infos[0] = "Date:" + getDateTime();
        infos[1] = "Version:" + getVersion();

        return infos;
    }

    private String getDateTime() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-DD-mm HH:mm:s");
        Date date = new Date(System.currentTimeMillis());

        return format.format(date);
    }

    private String getVersion() {
        return Build.DISPLAY;
    }
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值