Как отключить GSM соединение в Android программно - PullRequest
9 голосов
/ 09 сентября 2011

Я хочу включить / отключить GSM-соединение телефона Android.Мне нужно отключить / включить звонки и смс по мере необходимости.Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 08 июля 2012
/* 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, а для bluetooth android.permission.BLUETOOTH_ADMIN. Для NFC вам может понадобиться android.permission.NFC.

РЕДАКТИРОВАТЬ : сильно изменены с оригинала, так как я фактически использовал это по-другому в моем собственном приложении

5 голосов
/ 09 сентября 2011

РЕДАКТИРОВАТЬ: Это решение также отключит Wi-Fi, Bluetooth, и т.д ...

Если вы хотите отключить только радио, я думаю, что это связано с этой проблемой: http://code.google.com/p/android/issues/detail?id=1065 Яочень пессимистично в поиске хорошего решения, но любопытно увидеть другие ответы.

См. статью блога Android: управление режимом полета ,

// 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);

где isEnabled - включен режим полета или нет.

Не забывайте, что для этого вам нужно разрешение WRITE_SETTINGS.

...