UiModeManagerを利用してUIモードを変更する


今回はUiModeManagerクラスについて説明します。
UiModeManagerクラスを利用することでAndroid端末のUIモードをコントロールすることができます。
ドライブモードやナイトモードというUIモードのコントロールが可能です。

詳細は続きからどうぞ。

UiModeManagerのメソッド

まずUiModeManagerクラスで用意されているメソッドですが、以下のようなものがあります。

void disableCarMode(int flags) ドライブモードを無効にします
void enableCarMode(int flags) ドライブモードを有効にします
int getCurrentModeType() 現在のドライブモードを取得します
int getNightMode() 現在のナイトモードを取得します
void setNightMode(int mode) ナイトモードを設定します

ナイトモードの設定値

次にナイトモードに設定できる値ですが以下のようなものがあります。
なお、ドライブモードを有効にしていないとナイトモードの設定は反映されません。

MODE_NIGHT_NO ナイトモードを無効にします。
MODE_NIGHT_YES ナイトモードを有効にします
MODE_NIGHT_AUTO センサ値、位置情報などをもとに、ナイトモードを自動で設定します

サンプルプログラム

それではサンプルで実際に動作を見てみます。
ドライブモードとナイトモードの切り替えをボタンから行うサンプルプログラムになります。

まず、getSystemServiceメソッドでUiModeManagerのインスタンスを取得します。

// UiModeManagerのインスタンスを取得
umm = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);

次にCarModeの切り替えを行うボタンを作成します。

// CarModeのスイッチ用ボタン
btn_carMode = (Button) findViewById(R.id.btn_carMode);
btn_carMode.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {

		// 現在、Car Modeで動作していない場合
		if (umm.getCurrentModeType() == Configuration.UI_MODE_TYPE_NORMAL) {
			// CarModeをenableにする
			umm.enableCarMode(0);
			Toast.makeText(getApplicationContext(), "enable CarMode", Toast.LENGTH_SHORT).show();

		// 現在、Car Modeで動作している場合
		} else if (umm.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
			// CarModeをdisableにする
			umm.disableCarMode(0);
			Toast.makeText(getApplicationContext(), "disable CarMode", Toast.LENGTH_SHORT).show();
		}

	}
});
}

getCurrentModeTypeメソッドでCarModeの設定値を確認してから、
enableCarModeメソッドとdisableCarModeメソッドでCarModeの設定値を変更しています。

次にナイトモードの切り替えボタンです。

// NightModeのスイッチ用ボタン
btn_nightMode = (Button) findViewById(R.id.btn_nightMode);
btn_nightMode.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {

		// 現在、Night Modeで動作している場合
		if (umm.getNightMode() == UiModeManager.MODE_NIGHT_YES) {
			// NightModeを無効にする
			umm.setNightMode(UiModeManager.MODE_NIGHT_NO);
			Toast.makeText(getApplicationContext(), "disable NightMode", Toast.LENGTH_SHORT).show();

		// 現在、Night Modeで動作していない場合
		} else if (umm.getNightMode() == UiModeManager.MODE_NIGHT_NO) {
			// NightModeを有効にする
			umm.setNightMode(UiModeManager.MODE_NIGHT_YES);
			Toast.makeText(getApplicationContext(), "enable NightMode",	Toast.LENGTH_SHORT).show();
			}

		}
	});
}

getNightModeメソッドで現在のナイトモードを確認して、setNightModeメソッドでナイトモードの切り替えを行っています。

実際にドライブモードを有効にすると、ステータスバーにハンドルのアイコンが表示されます。

ドライブモードを有効にした状態でナイトモードも有効にするとステータスバーが暗めのものに変わります。