Отключить сотовое радио в андроиде 4.4+

Как я могу отключить/включить сотовую сеть в Android? Мне нужно полностью отключить его на короткое время, а так как у меня андроид 4.4+ режим полета трудно использовать.

Можно ли написать код, отключающий только сотовую сеть?


person user2654072    schedule 12.04.2015    source источник
comment
Авиарежим сложно использовать Насколько сложно его использовать?   -  person m0skit0    schedule 13.04.2015


Ответы (1)


Управление режимом полета

Проверьте, включена она или нет:

boolean isEnabled = Settings.System.getInt(
      context.getContentResolver(), 
      Settings.System.AIRPLANE_MODE_ON, 0) == 1;

Чтобы переключить его:

// toggle airplane mode
Settings.System.putInt(
      context.getContentResolver(),
      Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

// Post an intent to reload
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);

И вы можете использовать эту функцию:

/* Toggle airplane mode for 1 of the 4 allowed types
 * type allowed values: cell, wifi, bluetooth, nfc
 */
private void changeRadioComponentEnabled(Context context, String type, boolean radio_component_enabled, boolean reset){     
        // now toggle airplane mode from on to off, or vice versa
        Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, radio_component_enabled ? 0 : 1);

        // now change system behavior so that only one component is turned off
        // this also affects the future behavior of the system button for toggling air-plane mode. 
        // to reset it in order to maintain the system behavior, set reset to true, otherwise we lazily make sure mobile voice is always on
        Settings.System.putString(context.getContentResolver(), Settings.System.AIRPLANE_MODE_RADIOS, type); 

        // post an intent to reload so the menu button switches to the new state we set
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", radio_component_enabled ? false : true);
        context.sendBroadcast(intent);

        // revert to default system behavior or not
        if (reset){ Settings.System.putString(context.getContentResolver(), Settings.System.AIRPLANE_MODE_RADIOS, "cell,bluetooth,wifi,nfc"); }
        // if reset to default is not chosen, always enable mobile cell at  least
        // but only if NOT changing the mobile connection...
        else if (type.indexOf("cell") == 0) { Settings.System.putString(context.getContentResolver(), Settings.System.AIRPLANE_MODE_RADIOS, "cell");}
}//end method

Вам нужно разрешение android.permission.WRITE_SETTINGS

Подробнее читайте на:

http://dustinbreese.blogspot.com/2009/04/andoid-controlling-airplane-mode.html

Как программно отключить GSM-соединение в Android

EDIT: я читал, что этот метод больше нельзя использовать для Android 4.2 и выше. Но я думаю, что вы можете прочитать какой-нибудь интересный код, который работает в:

Как включить/выключить режим полета даже в новых версиях Android (и даже с root)?

Переключить режим полета в Android

person Adrian Cid Almaguer    schedule 13.04.2015
comment
Я видел это сообщение раньше, но оно дает исключение Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE. Нужен ли мне root вместе с разрешением на использование этого кода? - person user2654072; 13.04.2015
comment
@user2654072 user2654072, как я сказал в ответе, вам нужно разрешение android.permission.WRITE_SETTINGS, которое вам нужно в вашем manifest.xml, это <uses-permission android:name="android.permission.WRITE_SETTINGS" /> - person Adrian Cid Almaguer; 13.04.2015
comment
@user2654072 user2654072 Я редактирую ответ, взгляните на финал ответа. - person Adrian Cid Almaguer; 13.04.2015
comment
@ user2654072 у тебя есть аванс? - person Adrian Cid Almaguer; 14.04.2015
comment
пока не повезло на нерутированном телефоне, я, вероятно, рутирую его и пытаюсь сделать системное приложение, тогда, возможно, что-то произойдет. Это безумие, что Google заблокировал это от обычных разработчиков. - person user2654072; 15.04.2015
comment
@user2654072 user2654072 удачи вам, и вы решите свою проблему, не забудьте опубликовать ответ ;-) - person Adrian Cid Almaguer; 15.04.2015
comment
Это решено? есть ли способ управлять режимом полета? - person ransh; 22.05.2016