Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Управляем автономным режимом (Airplane Mode)

Данный код работает до Android 4.1 включительно. Начиная с Android 4.2 Google изменил политику и не разрешает программно управлять этим режимом.

Если по каким-то причинам вам нужно программно управлять автономным режимом (Airplane Mode) из своего приложения, не заставляя пользователя лезть в настройки телефона, то эта статья для вас.

Так как мы собираемся менять системные настройки, то сначала необходимо установить необходимые разрешения в манифесте:


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

Добавим на форму текстовую метку и ToggleButton. Осталось написать код:


package ru.alexanderklimov.airplanemode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.ToggleButton;

public class AirPlaneModeActivity extends Activity {

	static final String STATUS_ON = "Airplane Mode: Включён";
	static final String STATUS_OFF = "Airplane Mode: Выключить";

	static final String TURN_ON = "Включить";
	static final String TURN_OFF = "Выключить";

	TextView tvStatus;
	ToggleButton toggleState;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		tvStatus = (TextView) findViewById(R.id.tvStatus);
		toggleState = (ToggleButton) findViewById(R.id.toggleButton1);
		
		// устанавливаем текст при первой загрузке приложения
		updateUI(isAirplaneMode());

		// код для нажатия кнопки
		toggleState.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// проверяем текущее состояние
				boolean state = isAirplaneMode();
				// переключаемся на другое состояние
				toggleAirplaneMode(state);
				// обновляем информацию о новом состоянии на экране
				updateUI(!state);
			}
		});
	}

	public void toggleAirplaneMode(boolean state) {
		// переключаем автономный режим
		Settings.System.putInt(this.getContentResolver(),
				Settings.System.AIRPLANE_MODE_ON, state ? 0 : 1);

		// сообщаем системе об изменении
		Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
		intent.putExtra("state", !state);
		sendBroadcast(intent);
	}

	public void updateUI(boolean state) {
		if (state) {
			tvStatus.setText(STATUS_ON);
			toggleState.setText(TURN_OFF);
		} else {
			tvStatus.setText(STATUS_OFF);
			toggleState.setText(TURN_ON);
		}
	}

	public boolean isAirplaneMode() {
		return Settings.System.getInt(this.getContentResolver(),
				Settings.System.AIRPLANE_MODE_ON, 0) == 1;
	}
}

Обратите внимание, что при изменении автономного режима, мы посылаем соответствующее сообщение системе. Получив такое сообщение, Android выведет/спрячет значок самолёта в строке состояния.

Airplane Mode

Открываем окно настроек для автономного режима

Так как, начиная с Android 4.2, мы не можем программно включить режим автономного режима, то остаётся только один вариант - показать окно настроек, чтобы пользователь сам отметил флажком требуемую настройку:


startActivity(
        new Intent(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS));

Причина, по которой нужно пользоваться автономным режимом в самолёте.

Реклама