學習目標:
- 掌握Telecom入口和分析方法
- 總結和演進Telecom交互模型
- 掌握Listener消息回調機制
- 學習CallsManager
為什么選擇Telecom分析?
這是由於在Android Telephony通話模型中它為Dialer和TeleService消息中轉站,作為MT與MO消息處理關鍵入口,承上啟下,非常重要。
- 呈上:
相對與Dialer應用而言,發送call狀態變化消息給IInCallService服務,並接收Dialer應用發出的call狀態控制消息。
- 啟下
相對與TeleService應用而言,Telecom應用繼續傳遞接收到Dialer應用發出的call狀態控制消息給IConnectionService服務,並接收TeleService應用發出的Call狀態變化傳遞給Dialer應用。
frameworks/base/telecomm/java/android/telecom/TelecomManager.java
public static TelecomManager from(Context context) { return (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); }
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
private ITelecomService getTelecomService() { return ITelecomService.Stub.asInterface(ServiceManager.getService(TELECOM_SERVICE)); }
frameworks/base/core/java/android/app/SystemServiceRegistry.java
registerService(Context.TELECOM_SERVICE, TelecomManager.class, new CachedServiceFetcher<TelecomManager>() { @Override public TelecomManager createService(ContextImpl ctx) { return new TelecomManager(ctx.getOuterContext()); }});
frameworks/base/services/core/java/com/android/server/telecom/TelecomLoaderService.java
public class TelecomLoaderService extends SystemService { private class TelecomServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { ... ServiceManager.addService(Context.TELECOM_SERVICE, service);
}
...
@Override
public void onServiceDisconnected(ComponentName name) { connectToTelecom(); }
未完待續...