您的位置:首页 > 移动开发 > Android开发

Android中getSystemService的过程

2016-10-09 16:10 197 查看

1、获得一个service

./Telephony/src/com/android/phone/MobileNetworkSettings.java

TelephonyManager tm = (TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE);


./base/core/java/android/content/Context.java 中

/**
* Gets the name of the system-level service that is represented by the specified class.
*
* @param serviceClass The class of the desired service.
* @return The service name or null if the class is not a supported system service.
*/
public abstract String getSystemServiceName(Class<?> serviceClass);


/base/core/java/android/app/ContextImpl.java

@Override
    public String getSystemServiceName(Class<?> serviceClass) {
        return SystemServiceRegistry.getSystemServiceName(serviceClass);
    }


./base/core/java/android/app/SystemServiceRegistry.java

/**
* Gets the name of the system-level service that is represented by the specified class.
*/
public static String getSystemServiceName(Class<?> serviceClass) {
return SYSTEM_SERVICE_NAMES.get(serviceClass);
}


通过一下方式注册

registerService(Context.TELEPHONY_SERVICE, TelephonyManager.class,
new CachedServiceFetcher<TelephonyManager>() {
@Override
public TelephonyManager createService(ContextImpl ctx) {
return new TelephonyManager(ctx.getOuterContext());
}});


/**
* Statically registers a system service with the context.
* This method must be called during static initialization only.
*/
private static <T> void registerService(String serviceName, Class<T> serviceClass,
ServiceFetcher<T> serviceFetcher) {
SYSTEM_SERVICE_NAMES.put(serviceClass, serviceName);
SYSTEM_SERVICE_FETCHERS.put(serviceName, serviceFetcher);
}


初始化对象

./base/telephony/java/android/telephony/TelephonyManager.java

/** @hide */
public TelephonyManager(Context context) {
Context appContext = context.getApplicationContext();
if (appContext != null) {
mContext = appContext;
} else {
mContext = context;
}
mSubscriptionManager = SubscriptionManager.from(mContext);

if (sRegistry == null) {
sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
"telephony.registry"));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 通信