若手機處在飛航模式(Airplane Mode)中的話,那麼所有的訊號輸出入都會被停止並關閉,像是藍牙(Bluetooth)及 WIFI 等等。如果晚上睡覺不希望有人打電話來打擾,但又希望手機上的其它程式能正常執行的話,也許可以考慮這樣的模式。
假設筆者寫了一個鬧鐘程式,讓使用者啟用時可以把手機切到飛航模式以防止擾人的來電,等到起床的時間到了之後再自動把飛航模式給關閉。這時若能在程式中自由的控制飛航模式開關的話,那麼使用起來就會比較方便。
我們可使用 android.provider.Settings.System 所提供的 API 來存取系統的設定。例如筆者想知道目前是否已啟用飛航模式的話:
檢視原始碼 Android
1 2 3 4 5 6 | import android.content.Context; import android.provider.Settings; public static boolean isAirplaneModeOn(Context context){ return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; } |
Settings.System.AIRPLANE_MODE_ON 就是我們要取得的項目,若要取得其它的話可以參考 android.provider.Settings.System 中的常數清單。
要設定飛航模式的開關一樣是跟 android.provider.Settings.System 有關:
檢視原始碼 Android
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import android.content.Context; import android.content.Intent; import android.provider.Settings; public static void setAirplaneMode(Context context, boolean status){ // 先判斷目前是已否開啟飛航模式 boolean isAirplaneModeOn = isAirplaneModeOn(context); if((status && isAirplaneModeOn) || (!status && !isAirplaneModeOn)){ return; } int mode = status ? 1 : 0; // 設定飛航模式的狀態並廣播出去 Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, mode); Intent i = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); i.putExtra("state", mode); context.sendBroadcast(i); } |
要注意的是,變更系統設定是需要有 android.permission.WRITE_SETTINGS 權限才行的,因此要記得在 AndroidManifest.xml 中加上
檢視原始碼 XML
1 | <uses-permission android:name="android.permission.WRITE_SETTINGS" /> |
只要再搭配 android.appwidget.AppWidgetProvider 就能寫個飛航模式切換的 AppWidget 工具囉。但比較麻煩的是,若手機有設定用 PIN 碼開機的話,在關閉飛航模式後它也會需要再輸入 PIN 碼才行。
請問這段code中哪邊是可以控制飛航模式的地方阿 ?
mode 嗎 ?