Home » Android 程式片段

[Android]控制飛航模式(Airplane Mode)開啟/關閉

若手機處在飛航模式(Airplane Mode)中的話,那麼所有的訊號輸出入都會被停止並關閉,像是藍牙(Bluetooth)WIFI 等等。如果晚上睡覺不希望有人打電話來打擾,但又希望手機上的其它程式能正常執行的話,也許可以考慮這樣的模式。

假設筆者寫了一個鬧鐘程式,讓使用者啟用時可以把手機切到飛航模式以防止擾人的來電,等到起床的時間到了之後再自動把飛航模式給關閉。這時若能在程式中自由的控制飛航模式開關的話,那麼使用起來就會比較方便。

我們可使用 android.provider.Settings.System 所提供的 API 來存取系統的設定。例如筆者想知道目前是否已啟用飛航模式的話:

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 有關:

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 中加上

1
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

只要再搭配 android.appwidget.AppWidgetProvider 就能寫個飛航模式切換的 AppWidget 工具囉。但比較麻煩的是,若手機有設定用 PIN 碼開機的話,在關閉飛航模式後它也會需要再輸入 PIN 碼才行。

21 筆針對 [Android]控制飛航模式(Airplane Mode)開啟/關閉 的迴響

發表迴響