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

Ответить
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 01 ноя 2012, 12:32

Доброго дня форумчане! =)

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

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

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


Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 01 ноя 2012, 22:55

Это только при активном активити.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 02 ноя 2012, 01:01

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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 02 ноя 2012, 13:10

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 02 ноя 2012, 22:37

Бродкасты передает система, их нужно только отлавливать. Зачем их куда-то еще перенаправлять, если можно получать их там, где они нужны?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 03 ноя 2012, 07:57

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 03 ноя 2012, 11:50

И не нужно объявлять в манифесте,
Кроме того, можно не оформлять его отдельным классом (как в примере), а сделать встроенным или даже анонимным.
Вот этот код у меня прекрасно работает на устройстве (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);

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 08 ноя 2012, 12:49

AndreyI
Спасибо, воспользовался твоим способом :)

Ответить