若手機處在飛航模式(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 碼才行。
有没有android软件实现自动开关机,的?
現在要能自動關機或是重開的話...需要 root 過後才行
有沒有辦法自動輸入PIN code?
不確定有沒有辦法..但目前我還不會XD
你好,我想問下,把這個功能做成一個軟件,介面只有一個按鈕,點擊一下,飛行模式,再點擊一下,正常模式,該怎麼弄?希望哥哥可以回答下。剛接觸android,還不是很會。
一般的 app 只要放個 Button 後,接著就是寫你要執行的開關就可以了。
建議先看看怎樣寫個 Hello World
Abc.setAirplaneMode(context,status);
調用靜態方法,這個context和status的值是什麽?
status 就是用來控制開或關的, context 則為呼叫調用的 Context
請問哪如果要切換成鈴聲模式要怎麼寫比較好阿?
SOUND_EFFECTS_ENABLED=1
這樣就可以了嗎?還是也要廣播出去
要切換鈴聲得利用 AudioManager 才行囉~
請問這個程式
可以用在service的Runnabl裡面嗎?還是要用Activity才能
只要有權限應該就可以。
恩~~感謝你我搞定那部分了~~
另外請問您一個問題~android要怎麼接收email的內容阿?
網路上一直找不到
可以查查 pop3 及 smtp
請問調用方法的Context要填入什麼....
我試好久找不出來...寫在service裡面
試試 getApplicationContext()
ㄟ這個就可以了~~好厲害..我還找好久
你好, 我試用你的code, 在使用上有一些問題. 是這樣的, 我先開我的程式, 有基地台訊號, 資料也可以傳輸. 然後我利用電源鍵, 切到飛航模式, 依程式邏輯的判斷, 我確認了可以透過上述的程式碼把飛航模式關閉, 但是卻發現, 基地台也因此無信號, 也無法傳遞資料. 我使用的是3G版 HTC Flyer, 不知道各位使用上述的Code是否有這樣的問題!
飛安模式不就是把各種通訊功能關閉嗎?所以 3G 的訊號被切斷也是正常的吧!!
不好意思,表達不清楚。我是說 "飛航模式關閉" 代表利用程式切回成"3G可以使用的模式"時,基地台的訊號會消失。我認為理當基地台還是要有訊號才是。