强制安卓应用程序使用移动数据信道

4
我正在调查我开发的一个应用程序。问题是应用程序需要连接到移动数据网络,因此当 Wifi 打开时,它将无法正确路由,因为服务器在运营商网络上而不是公共网络上。是否可以使单个应用程序针对移动数据,而其他应用程序则退回到 Wifi,还是这是一些非标准的东西?

1个回答

3

您不能以应用程序为基础明确强制通信渠道(您可以通过请求使用首选模式来 ConnectivityManager.setNetworkPreference(...),但那不是“强制”的)。

虽然这可能是可怕的用户体验,但是您可以通知用户,您的应用程序禁止使用WiFi,然后如果他们想要继续,就禁用其WiFi。为此,您需要具有ACCESS_WIFI_STATECHANGE_WIFI_STATE权限。代码将类似于以下内容:

manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);

if(manager.isWifiEnabled()) {
    manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

很好的回答,楼主可能想看看这篇回答,其中还讨论了此事:https://dev59.com/2m025IYBdhLWcg3wpXoe#5883882。 - Jean-Philippe Roy
对于任何最近的Android版本,您肯定可以。https://dev59.com/DXE85IYBdhLWcg3w_I38#4756630非常详细,只需要补充一个连接状态广播接收器来接收高优先级移动数据已启用(或失败)的通知-示例提到了“等待”,但这是次优的,可以通过前面提到的广播接收器实现。 - Jens
@Jens 那个方法不太可靠,只适用于 Android 2.2+。它要求你基本上每隔几秒钟发送数据来保持移动通道的开放状态。我的答案完全实现了 OP 所要求的,并且不强制他的用户使用特定版本的平台。 - Chris Cashwell
目前2.3.3的市场渗透率超过50%,而2.2+的份额超过90%-如果您考虑ROI,则通常不会设计2.1及以前的版本。 - Jens
setNetworkPreference() 现在已被弃用,叹气。 - SMBiggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接