WiFi打开时如何在iPhone中获取移动数据状态

Posted

技术标签:

【中文标题】WiFi打开时如何在iPhone中获取移动数据状态【英文标题】:How to get Mobile data status in iPhone when WiFi is ON 【发布时间】:2016-03-01 12:16:16 【问题描述】:

目前我正在开发一个需要显示移动数据状态(开/关)的 iPhone 应用程序。对于网络检查,我使用 Reachability 类,但是当启用任何一个网络(即 WiFi/移动数据)时,它会给我正确的结果,但如果两者都启用,它会给出 Wifi 状态,但我的要求是我只需要移动数据状态还。 如果有人建议我解决方案,那就太好了。

谢谢

【问题讨论】:

你能把你写的代码贴出来吗?如果我们看不到任何代码,就很难诊断。 可达性 *reachability = [可达性reachabilityForInternetConnection]; [可达性 startNotifier]; NetworkStatus 状态 = [可达性 currentReachabilityStatus]; if(status == NotReachable) //没有互联网 else if (status == ReachableViaWWAN) //蜂窝数据 else if (status == ReachableViaWiFi) //Wifi 如果(Wifi 和移动数据)都开启它正在执行最后一个块 【参考方案1】:

设置一些逻辑,例如检查网络是否连接到 Wifi 或 Cellular-data ,然后在蜂窝数据中设置您的代码。

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus status = [reachability currentReachabilityStatus];
if(status == NotReachable) 

    //No internet

else if (status == ReachableViaWiFi)

    //WiFi

else if (status == ReachableViaWWAN) 

    //3G // Set your code here for cellular data

ios-detect-3g-or-wifi上查找更多详细信息,根据您的要求设置。

注意:- 我认为当您的 iPhone 连接到 wifi 时,它会自动留下蜂窝数据,如果断开 wifi,则再次连接到蜂窝数据

编辑:- 我不确定,但试试这个,

if(status == NotReachable) 
    
        //No internet
    
   else if (status == ReachableViaWWAN) 
    
        //3G // Set your code here for cellular data
       if (status == ReachableViaWiFi)
      
        //WiFi // Keep Wifi and cellulardata both on.
      
    
    else if (status == ReachableViaWiFi)
    
        //WiFi
    


     else if (status == ReachableViaWWAN) 
    
      // keep status only cellularadat on
     

【讨论】:

当我们单独检查时,无论是否启用,我们都可以获取网络状态,即(WiFi ON 和移动数据 OFF,反之亦然)。当两者都打开时,我们得到的状态是什么(WiFi ON和移动数据开启)。它显示 WiFi 状态,但我也想读取移动数据状态。 请查看备注。当您的设备与 wifi 连接时,它会留下蜂窝数据。 当您同时连接两者时,满足哪个条件? wifi 还是蜂窝数据? WiFi 条件即使我先写蜂窝数据条件 是的,我同意它会在 WiFi 打开时留下蜂窝数据,但我也只想检查移动数据状态。除了可达性等级之外还有其他解决方案吗【参考方案2】:

遗憾的是,打开 WiFi 时似乎无法检查移动数据是否打开。您可以检测是否有WiFi连接,是否没有WiFi连接而是移动数据连接,或者根本没有连接。但如果有 WiFi 连接,似乎也无法检测是否有数据连接。

使用电话类,您可以检测设备是否有 SIM 卡,并且您可以检测您的应用程序的“设置”中是否已禁用移动数据。据我所知,您无法检测到是否为整个设备启用了移动数据。

您也无法区分 Wifi 已关闭、已打开 WiFi 但附近没有或未选择网络以及已打开飞行模式。

【讨论】:

以上是关于WiFi打开时如何在iPhone中获取移动数据状态的主要内容,如果未能解决你的问题,请参考以下文章

打开移动数据时如何从wifi网络访问本地url?

Flutter应用打开时如何从sqlite数据库加载初始状态数据

获取准确的车速

wifi关闭并再次打开时Websocket重新连接问题

从 iPhone 主屏幕重新打开时,如何在 jQuery Mobile 应用程序上缓存并保留上次访问的页面?

iPhone SDK - 如何在应用程序关闭和重新打开时保存和恢复计时器标签