在Android 6中打开wifi时如何为任何应用程序强制使用移动数据
Posted
技术标签:
【中文标题】在Android 6中打开wifi时如何为任何应用程序强制使用移动数据【英文标题】:How to use mobile data forcefully for any application when wifi is on in Android 6 【发布时间】:2017-03-06 02:50:29 【问题描述】:我希望 android 应用程序在 Android 6 中仅使用移动数据,即使 WIFI 和移动数据都开启。如何仅将 android 进程绑定到移动数据。 请建议。例子会很好。
【问题讨论】:
【参考方案1】:如果你的安卓版本是 M 或以上,你可以很容易地做到这一点。
首先,您需要正确的清单权限:
这是一个示例方法,应该可以满足您的需要:
public static void forceConnectionToMobile2(Context context)
final ConnectivityManager connection_manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
NetworkRequest.Builder request = new NetworkRequest.Builder();
Log.d(TAG,"request TRANSPORT_CELLULAR");
request.addCapability(NetworkCapabilities.TRANSPORT_CELLULAR);
connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
@Override
public void onAvailable(Network network)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
Log.d(TAG,"binding app to cellular network");
connection_manager.bindProcessToNetwork(network);
);
【讨论】:
我在没有互联网的情况下尝试了这个并打开了蜂窝数据,但我无法使用互联网......【参考方案2】:boolean mobileDataEnabled = false;
try
Class cmClass = Class.forName(connection_manager.getClass().getName());
Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
method.setAccessible(true);
mobileDataEnabled = (Boolean) method.invoke(connection_manager);
catch (Exception e)
First check if mobile data enable or disable then do
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
@Override
public void onAvailable(Network network)
connection_manager.bindProcessToNetwork(network);
【讨论】:
【参考方案3】:您可以访问Android force app to use mobile data channel
manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
if(manager.isWifiEnabled())
manager.setWifiEnabled(false);
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
【讨论】:
我不想在设备级别禁用 WIFI。只想为我的应用使用仅移动数据。 boolean mobileDataEnabled = false;尝试 类 cmClass = Class.forName(connection_manager.getClass().getName());方法method = cmClass.getDeclaredMethod("getMobileDataEnabled");方法.setAccessible(true); mobileDataEnabled = (Boolean) method.invoke(connection_manager); 捕捉(异常 e)以上是关于在Android 6中打开wifi时如何为任何应用程序强制使用移动数据的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 应用程序中单击时如何为下拉按钮中的项目设置填充