在Android 11的版本中,可以通过代码实现强制设置3G、4G网络为Only模式。
首先需要在AndroidManifest.xml文件中添加以下权限:
然后可以使用下面的代码段来实现该功能:
//获取Phone对象 TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //设置网络制式的Type int networkType = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { networkType = TelephonyManager.NETWORK_TYPE_NR;//5G }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ networkType = TelephonyManager.NETWORK_TYPE_LTE;//4G }else{ networkType = TelephonyManager.NETWORK_TYPE_UMTS;//3G } //设置强制网络模式 if (telephonyManager != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { telephonyManager.setDataNetworkType(TelephonyManager.NETWORK_TYPE_NR_ONLY); }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { telephonyManager.setPreferredNetworkType(TelephonyManager.NETWORK_TYPE_LTE_ONLY); }else{ try { Class> telephonyClass = Class.forName(telephonyManager.getClass().getName()); Method getITelephonyMethod = telephonyClass.getDeclaredMethod("getITelephony"); getITelephonyMethod.setAccessible(true); Object ITelephonyStub = getITelephonyMethod.invoke(telephonyManager); Class> ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName()); Method setPreferredNetworkTypeMethod = ITelephonyClass.getDeclaredMethod("setPreferredNetworkType", int.class); setPreferredNetworkTypeMethod.setAccessible(true); setPreferredNetworkTypeMethod.invoke(ITelephonyStub, networkType); } catch (Exception e) { e.printStackTrace(); } } }
这个代码段将在您的应用程序中强制将网络模式设置为