强制Android应用使用移动数据而不关闭wifi

时间:2016-04-12 12:52:15

标签: android networking

我的应用有时需要通过移动数据进行连接才能正常工作。我知道有些应用程序可以让某个应用程序只使用移动数据,我知道如何使用我的应用程序关闭和使用wifi。但有没有办法告诉我的应用程序从现在开始使用移动连接,并在另一点删除此限制?

2 个答案:

答案 0 :(得分:0)

我使用的解决方法仅适用于有根电话。

已从ConnectivityManager中删除了setMobileDataEnabled方法,但是为TeleTonyManager添加了两个方法getDataEnabled和setDataEnabled以实现此功能。

public void setMobileDataState(boolean mobileDataEnabled)
{
    try
    {
        TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);

        if (null != setMobileDataEnabledMethod)
        {
            setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled);
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, "Error setting mobile data state", ex);
    }
}

public boolean getMobileDataState()
{
    try
    {
        TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        Method getMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("getDataEnabled");

        if (null != getMobileDataEnabledMethod)
        {
            boolean mobileDataEnabled = (Boolean) getMobileDataEnabledMethod.invoke(telephonyService);

            return mobileDataEnabled;
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, "Error getting mobile data state", ex);
    }

    return false;
}

但您需要将此权限(MODIFY_PHONE_STATE)添加到Manifest文件中,否则您将获得SecurityException。

答案 1 :(得分:0)

您不能基于每个应用明确强制通信渠道(您可以通过ConnectivityManager.setNetworkPreference(...)请求使用首选模式,但这不是“强制”)。

 // and to be sure:
   ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);