안 드 로 이 드 프레임 워 크 에 사용자 정의 시스템 서 비 스 를 추가 합 니 다.

4635 단어 Android개발 총화
  • 시스템 서 비 스 를 추가 하려 면 aidl, service, manager 파일 을 추가 해 야 합 니 다. SystemServer, Context, ContextImpl
  • 을 수정 해 야 합 니 다.
  • 다음 에 예 를 들 어 설명 하고 주로 서 비 스 를 추가 하여 시스템 시간 과 버 전 번호
  • 를 얻 는 데 사용 합 니 다.
    1. frameworks / base / core / java / android / app / 에 aidl 파일 추가
    frameworks/base/core/java/android/app/ISystemStatusManager.aidl
    
     
      
    package android.app;
    
    interface ISystemStatusManager
    {
        String[] getSystemStatus();
    }

    2. frameworks / base / android. mk 파일 을 수정 하고 aidl 을 이 파일 에 추가 해 야 컴 파일 할 수 있 습 니 다. 그렇지 않 으 면 컴 파일 할 수 없습니다.
     core/java/android/app/ISystemStatusManager.aidl \  LOCAL_SRC_FILES  
    

    3. frameworks / base / services / core / java / com / android / server / 에 service 파일 추가
    frameworks/base/services/core/java/com/android/server/SystemStatusManagerService.java
    
     
      
    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() + "
    Version:" + 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; } }

    4. frameworks / base / core / java / android / app / 에 manager 추가
    frameworks/base/core/java/android/app/SystemStatusManager.java
    
     
      
    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;
        }
    }

    5. frameworks / base / core / java / android / content / context. java 에 service 이름 정 의 를 추가 합 니 다.
    public static final String SYSTEM_STATUS_SERVICE = "system_status_service";
    

    6. frameworks / base / services / java / com / android / server / System Server. java 에 서비스 추가
  • startOther Services () 방법 에 다음 과 같은 코드 를 추가 합 니 다
  •  
      
    try {
        ServiceManager.addService(Context.SYSTEM_STATUS_SERVICE, new SystemStatusManagerService(context));
    } catch (Throwable e) {
        Slog.e(TAG, "Failure starting System Status Service ", e);
    }

    7. frameworks / base / core / java / android / app / contextImpl. java 에 서 비 스 를 등록 합 니 다.
  • static {} 에 다음 코드 를 추가 합 니 다
  •  
      
    registerService(SYSTEM_STATUS_SERVICE, new ServiceFetcher() {
        public Object createService(ContextImpl ctx) {
            IBinder b = ServiceManager.getService(SYSTEM_STATUS_SERVICE);
            return new SystemStatusManager(ctx, ISystemStatusManager.Stub.asInterface(b));
        }
    });

    8. framework. jar 와 services. jar 를 컴 파일 하여 핸드폰 으로 push 하고 핸드폰 을 다시 시작 합 니 다.
  • 핸드폰 을 다시 켜 면 다음 과 같은 로그 가 출력 됩 니 다.
  • D/SystemStatus(  910): Date:2017-01-00 00:00:13
    D/SystemStatus(  910): Version:xxx
    

    9. 시스템 app 이 이 서 비 스 를 사용 해 야 한다 면 다음 과 같은 방식 으로 호출 할 수 있 습 니 다.
     
      
    SystemStatusManager mManager = (SystemStatusManager) getSystemService(Context.SYSTEM_STATUS_SERVICE);
    try {
        String[] infos = mManager.getSystemStatus();
        Log.i("SystemStatus", "SystemStatus Date:" + infos[0] + "
    Version:" + infos[1]); } catch (Exception e) { e.printStackTrace(); }

    좋은 웹페이지 즐겨찾기