• 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 调用实现流程.如果我们自己想加服务的话,也可以按照同样的步骤来进行操作

  • 相关阅读:
    【C语言拓展】运算符、scanf与scanf_s的区别、特点
    flink MemoryStateBackend 和 RocksDBStateBackend 切换导致任务出现bug
    2023-10学习笔记
    循环练习
    解决Pytest UnknownMarkWarning: Unknown pytest.mark.single - is this a typo?
    java计算机毕业设计校园失物招领管理系统源码+系统+mysql数据库+lw文档
    基础课3——自然语言处理的应用
    Linux是什么,其特点是啥
    sdkman 的安装配置与 sdk 管理
    LabVIEW​能否​像​C​语言​一样
  • 原文地址:https://blog.csdn.net/LILI007/article/details/125507690