2011-09-09 20 views

Odpowiedz

5

EDIT: To rozwiązanie będzie również wyłączyć WiFi, Bluetooth, itp ...

Jeśli chcesz wyłączyć radio, tylko myślę, że jest to związane z tym numerze: http://code.google.com/p/android/issues/detail?id=1065 Jestem bardzo pesymistycznie o znalezienie dobre rozwiązanie, ale ciekawi innych odpowiedzi.

zobaczyć blogu Android: Controlling Airplane Mode,

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

gdzie isEnabled czy tryb samolotowy jest włączony, czy nie.

Nie zapominaj, że potrzebujesz uprawnienia WRITE_SETTINGS, aby to zrobić.

+0

+1 dobrym rozwiązaniem –

+0

Kiedy można przełączyć telefon w tryb samolotowy będzie również tłumić wi-fi i bluetooth. Nie sądzę, że to jest to, czego się spodziewamy. Podstawowym zadaniem było wyłączenie tylko połączenia GSM ... – barmaley

+0

yes.i już wypróbowane z airplanemode. To wyłącza również bluetooth.Ale chcę wyłączyć tylko połączenia i sms jest to możliwe ????? i wyłączone GPRS. Czy jest dostępna jakakolwiek metoda? – Ram

5
/* 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 

naturalnie to wymagać zgody android.permission.WRITE_SETTINGS i przez bluetooth android.permission.BLUETOOTH_ADMIN. W przypadku NFC możesz potrzebować android.permission.NFC.

edytuje: mocno zmodyfikowany od oryginału, ponieważ byłem rzeczywiście przy tym w różny sposób w moim app

+0

Mój telefon ma także wimax w Ustawieniach.System.AIRPLANE_MODE_RADIOS: "komórka, bluetooth, wifi, nfc, wimax". To zaskakujące, ponieważ ten telefon nie obsługuje technologii 4G WiMax! – pmont

Powiązane problemy