有意图启用移动数据(Lte / 3g / gprs)

时间:2015-11-14 10:44:58

标签: android android-intent

在我的应用中,我想将用户导航到他/她能够激活设备移动数据的设置 我想使用意图来解决这个问题,但我的问题是移动数据选项在Exmaple的设备设置中的不同页面中,代码在Sony Xperia Z2设备中工作正常(使用android 5.1.1)

startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));  

但是在其他一些设备中,例如sony experia SP(android 4.3)和samsung S4(android 5.0.1),用户必须再选择一步并进入移动网络页面。 我可以使用以下代码解决此问题:(直接进入移动网络)

Intent intent=new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);
ComponentName cn = new ComponentName("com.android.phone","com.android.phone.Settings");
intent.setComponent(cn);
startActivity(intent);

但是z2用户必须退一步! 我该如何解决这个问题?选择哪种方式? (我希望解释问题清楚)

1 个答案:

答案 0 :(得分:1)

尝试这种方式:

同时添加权限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

启用移动/ 3g数据的方法:

private void setMobileDataEnabled(Context context, boolean enabled) {
    final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final Class conmanClass = Class.forName(conman.getClass().getName());
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
    iConnectivityManagerField.setAccessible(true);

    final Object iConnectivityManager = iConnectivityManagerField.get(conman);
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());

    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);

    setMobileDataEnabledMethod.setAccessible(true);

    setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}

对于棒棒糖及以上:

The setMobileDataEnabled method is no longer callable as of Android L and later