2015-04-12 54 views
2

中禁用蜂窩無線電如何禁用/啓用android中的蜂窩網絡?我需要完全禁用它很短的時間,因爲我有Android 4.4+飛機模式很難使用。在Android 4.4 +

是否可以編寫禁用蜂窩網絡的代碼?

+0

「飛行模式很難用」怎麼難用? – m0skit0

回答

0

控制飛行模式

檢查,看它是否被啓用與否:

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

How to disable GSM connection in Android programmatically

編輯:我看,這種方法是不再可能使用Android 4.2及以上。但我認爲,你可以閱讀一些有趣的代碼,在工作:

How to turn on/off airplane mode, even on new Android versions (and even with root)?

Toggle airplane mode in Android

+0

我在之前看到過帖子,但是它給出了'Permission Denial:不允許發送廣播android.intent.action.AIRPLANE_MODE'異常,我是否需要root權限才能使用該代碼? – user2654072

+0

@ user2654072正如我在答案中所說的,您需要您在manifest.xml中需要的權限'android.permission.WRITE_SETTINGS'這個<使用權限android:name =「android.permission.WRITE_SETTINGS」/>' –

+0

@ user2654072我編輯答案,看看答案的最後。 –