• Android 11 热点(softap)流程分析(二) WifiManager--AIDL


    Android 10以后引入了stable aidl方法,结合上一篇中WifiManager类中通过aidl调用到WifiServiceImpl类中方法,做个详细的记录.

    一.frameworks/base/wifi/java/android/net/wifi/WifiManager.java类中方法

    public boolean startSoftAp(@Nullable WifiConfiguration wifiConfig) {
            try {
                return mService.startSoftAp(wifiConfig);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }

    其中mService在类中定义为:   

    @UnsupportedAppUsage
        IWifiManager mService;

    赋值操作在构造函数里面:

      public WifiManager(@NonNull Context context, @NonNull IWifiManager service,
            @NonNull Looper looper) {
            mService = service;
            mLooper = looper;
        }

    IWifiManager为frameworks/base/wifi/java/android/net/wifi/IWifiManager.aidl {

                    startsoftap(){..}

    }

    二:开始找WifiManager在哪里进行实例话的,service传的哪个service

            在framework/base/wifi/java/android/net/wifi/WifiFrameworkInitializer.java

      public static void registerServiceWrappers() {
            SystemServiceRegistry.registerContextAwareService(
                    Context.WIFI_SERVICE,
                    WifiManager.class,
                    (context, serviceBinder) -> {
                        IWifiManager service = IWifiManager.Stub.asInterface(serviceBinder);
                        return new WifiManager(context, service, getInstanceLooper());
                    }
            );

    IWifiManager service通过标准的asInterface函数得到实例.

    WIFI_SERVICE定义"wifi"

    三:在wifi service中寻找IWifiManager 接口的绑定

    在frameworks/opt/net/wifi/service/java/com/android/server/wifi/BaseWifiService.java类中实现.

    先导入IWifiManager aidl包.

    import android.net.wifi.IWifiManager;

    然后BaseWifiService继承IWifiManager.Stub

    public class BaseWifiService extends IWifiManager.Stub {

        startsoftap(){..}

    }

    该类里面全是接口的声明.实际的实现在impl类里面

    四.接口的实际实现位置

    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java

    public class WifiServiceImpl extends BaseWifiService {

            startsoftap(){..}

    }

    该类继承第三步中的BaseWifiService,真正实现了IWifiManager aidl中的接口功能.

    这是Android 11中wifimanger中对应adil 调用实现流程.如果我们自己想加服务的话,也可以按照同样的步骤来进行操作

  • 相关阅读:
    Scrapy + selenium + 超级鹰验证码识别爬取网站
    Web(二)html5基础-表格高级样式的设置
    JS高级 之 事件循环
    记一次某制造业ERP系统 CPU打爆事故分析
    Appium切换Android设备输入法, 以及回车按键操作
    Jtti:云服务器ftp不能访问端口如何解决
    Linux下编译SQLite3源码
    【华为OD机试真题 python】 冠亚军排名【2022 Q4 | 100分】
    react scss.modules中使用iconfont
    Ubuntu安装Jitsi Meet详细教程
  • 原文地址:https://blog.csdn.net/LILI007/article/details/125507690