Страница 1 из 1

Спящий режим смартфона

Добавлено: 01 ноя 2012, 12:32
neoksi
Доброго дня форумчане! =)

Сталкивались вы с проблемой определения спящего режима у устройств под Андроид? Если да, то приведите пожалуйста ваши варианты решения, чтоб мне не изобретать велосипед ;)

Задача у меня простая на первый взгляд:
Когда пользователь взаимодействует с устройством у АлармМенеджера должен быть один интервал срабатывания, а когда пользователь к примеру положил телефон в карман, перестал взаимодействовать, то интервал АлармМенеджера меняется на больший.

Можно ли такое сотворить с помощью стандартных броадкастов?

Re: Спящий режим смартфона

Добавлено: 01 ноя 2012, 15:11
AndreyI

Re: Спящий режим смартфона

Добавлено: 01 ноя 2012, 22:55
neoksi
Это только при активном активити.

Re: Спящий режим смартфона

Добавлено: 02 ноя 2012, 01:01
AndreyI
Работает и в сервисе, специально проверил. Для чистоты эксперимента сервис запускал в отдельном процессе и убивал Activity. Логи включения/отключения экрана приходили четко.
Для BroadcastReceiver разницы нет, где его зарегистрируешь там и будет работать, хоть в Activity, хоть в сервисе.

Re: Спящий режим смартфона

Добавлено: 02 ноя 2012, 13:10
neoksi
Тобишь, ты предлагаешь создать отдельный сервис в отдельном процессе от приложения, функцией которого будет просто генерирование Броадкастов для основного приложения о включении и выключении экрана?

Re: Спящий режим смартфона

Добавлено: 02 ноя 2012, 22:37
AndreyI
Бродкасты передает система, их нужно только отлавливать. Зачем их куда-то еще перенаправлять, если можно получать их там, где они нужны?

Re: Спящий режим смартфона

Добавлено: 03 ноя 2012, 07:57
neoksi
AndreyI писал(а):Бродкасты передает система, их нужно только отлавливать. Зачем их куда-то еще перенаправлять, если можно получать их там, где они нужны?
Все понял, просто эти броадкасты не объявить в манифесте. А нужно регистрировать по ходу выполнения программы.

Re: Спящий режим смартфона

Добавлено: 03 ноя 2012, 11:50
AndreyI
И не нужно объявлять в манифесте,
Кроме того, можно не оформлять его отдельным классом (как в примере), а сделать встроенным или даже анонимным.
Вот этот код у меня прекрасно работает на устройстве (SGS2) как в активити, так и в фоновом сервисе, без всяких объявлений в манифесте:

Код: Выделить всё

		IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
		filter.addAction(Intent.ACTION_SCREEN_OFF);
		BroadcastReceiver br= new BroadcastReceiver() {
			
			@Override
			public void onReceive(Context context, Intent intent) {
				if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
					Log.d("MyLog", "Screen ON");
				}else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
					Log.d("MyLog", "Screen OFF");
				}								
			}
		};
		
		registerReceiver(br, filter);

Re: Спящий режим смартфона

Добавлено: 08 ноя 2012, 12:49
neoksi
AndreyI
Спасибо, воспользовался твоим способом :)