во-первых, вы должны знать, поскольку класс android Q, WifiManager
не работает.
Этот метод устарел на уровне API 29. Начиная с Build.VERSION_CODES # Q, приложения не разрешено включать / отключать Wi-Fi. Примечание о совместимости: для приложений, нацеленных на Build.VERSION_CODES.Q или выше, этот API всегда будет возвращать false и не будет иметь никакого эффекта. Если приложения нацелены на более старый SDK (Build.VERSION_CODES.P или ниже), они могут продолжать использовать этот API.
Как для сети, так и для Wi-Fi, я предлагаю вам показать диалоговое окно с разрешениями, пользователь откроет его, он соответствует диспетчеру разрешений android.
. Вы можете использовать следующий код, чтобы открыть параметр
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.android.settings",
"com.android.settings.Settings$DataUsageSummaryActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
, если целевой SDK ниже Q, вы можете попробовать используйте способ отражения.
private void setMobileDataEnabled(Context context, boolean enabled) throws Exception{
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Class conmanClass = null;
try {
conmanClass = Class.forName(conman.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
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);
}