Android13 Wifi Scan流程梳理

在Android13中,WiFi模块被移动到了/package/modules目录下,这涉及到IWifiManager.aidl接口的使用和服务调用。当应用调用startScan方法时,会经过权限检查、服务交互以及一系列的内部处理,包括扫描请求的限制和优化。这一变动可能对依赖于WiFi功能的应用产生影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搞openharmony的公司黄掉了,做回android了,惨!
Android13 wifi模块移动到/package/modules中了

├── WifiDialog
├── apex
├── framework
└── service
通过aidl暴露给上端的api
调用对应的service
app
framework
service

以扫描流程为例:
IWifiManager.aidl
这里是提供给上层的api:

    boolean startScan(String packageName, String featureId);

WifiServiceImpl是IWifiManager这个binder的服务端:
WifiServiceImpl.java

    public boolean startScan(String packageName, String featureId) {
   
        if (enforceChangePermission(packageName) != MODE_ALLOWED) {
   
            return false;
        }
        int callingUid = Binder.getCallingUid();
        mWifiPermissionsUtil.checkPackage(callingUid, packageName);

        long ident = Binder.clearCallingIdentity();
        mLog.info("startScan uid=%").c(callingUid).flush();
        synchronized (this) {
   
            if (mInIdleMode) {
   
                // Need to send an immediate scan result broadcast in case the
                // caller is waiting for a result ..

                // TODO: investigate if the logic to cancel scans when idle can move to
                // WifiScanningServiceImpl.  This will 1 - clean up WifiServiceImpl and 2 -
                // avoid plumbing an awkward path to report a cancelled/failed scan.  This will
                // be sent directly until b/31398592 is fixed.
                sendFailedScanBroadcast();
                mScanPending = true;
                return false;
            }
        }
        try {
   
            mWifiPermissionsUtil.enforceCanAccessScanResults(packageName, featureId, callingUid,
                    null);
            Boolean scanSuccess = mWifiThreadRunner.call(() ->
                    mScanRequestProxy.startScan(callingUid, packageName), null);
            if (scanSuccess == null) {
   
                sendFailedScanBroadcast();
                return false;
            }
            if (!scanSuccess) {
   
                Log.e(TAG, "Failed to start scan");
                return false;
            }
        } catch (SecurityException e) {
   
            Log.w(TAG, "Permission violation - startScan not allowed for"
                    + " uid=" + callingUid + ", packageName=" + packageName + ", reason=" + e);
            return false;
        } finally {
   
            Binder.restoreCallingIdentity(ident);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值