android的wifi模块中AIDL的通讯
? android系统中的wifi的前端显示在应用Settings中设计的(pakages/apps/Settings),在wifi的开启,关闭,扫描都需要后台的WifiService类来提供服务,Settings跟WifiService是运行在两个不同进程的程序,所以就需要到了AIDL(Android interface definiton lanugage)来实现进程间的通信,当然实现进程通信还有别的方式,比如广播,意图,还有文件,但考虑到实际需求 ? 要用前台Settings要实时的显示后台WifiService的状态,还是用AIDL合适
?
? ?在系统启动的时候,会启动一系列的服务,其中就有WifiService。
?
? ?现在分析启动wifi的这个过程的AIDL通讯
?
? ?在Settings应用中用WifiEnabler.java这个类来封装了,wifi的启动和关闭还有wifi状态的转换及显示 ?。在WifiEnable.java中点击CheckBox,会执行onPreferenceChange(),在该方法里执行mWifiManager.setWifiEnabled(enable) ?在WifiManager.setWifiEnabled()中执行mService.setWifiEnabled() ? ?,mService为AIDL通信接口的实例,是一个WifiService的实例,可以通过它调用WifiService服务的内定义的方法。
? ?mService是在取得WifiManager实例过程中调用ContextIpl.java类的getWifiManager()得到的 ??
WifiManager?mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
?
?
? ?写道
private WifiManager getWifiManager()?
?
在WifiManeger的构造函数中,传递到WifiManger
?
?
?
?
?