Как изменить состояние сети устройства из исходного кода в Android? - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь изменить состояние сети устройства из исходного кода.
Я заметил, что у приложений есть разрешение на изменение состояния сети, т. Е. CHANGE_NETWORK_STATE.

Но я не могу найти ни одного примера или кода, который мог бы изменить состояние сети устройства.

Пожалуйста, дайте мне знать, если кто-нибудь знает или имеет пример для изменения состояния сети устройства.

С уважением,
SSuman185

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Этот код работает.Я получил это от здесь .

 private void setMobileDataEnabled(Context context, boolean enabled) {

        try {
        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);

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {

        }
    }
1 голос
/ 23 января 2012

вы можете изменить состояние Wi-Fi с помощью

 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
 wifiManager.setWifiEnabled(true);

вот ответ, который вы можете посмотреть, нажав здесь

Отключение и включение соединения Dataconnection скрыты вSDK, недоступный для пользователя, этого можно достичь, получив доступ к интерфейсу ITelephony с использованием техники отражения java.

здесь вы идете:

Method dataConnSwitchmethod;
Class telephonyManagerClass;
Object ITelephonyStub;
Class ITelephonyClass;

TelephonyManager telephonyManager = (TelephonyManager) context
        .getSystemService(Context.TELEPHONY_SERVICE);

if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){
    isEnabled = true;
}else{
    isEnabled = false;  
}   

telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());
Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());

if (isEnabled) {
    dataConnSwitchmethod = ITelephonyClass
            .getDeclaredMethod("disableDataConnectivity");
} else {
    dataConnSwitchmethod = ITelephonyClass
            .getDeclaredMethod("enableDataConnectivity");   
}
dataConnSwitchmethod.setAccessible(true);
dataConnSwitchmethod.invoke(ITelephonyStub);
...