2013-07-01 3 views
4

Мое приложение просто должно обнаружить любое движение устройства, когда экран выключен.Можно ли обнаружить движение, когда экран выключен?

Я знаю, что для этой задачи используется акселерометр, но он не работает, когда экран выключен на всех устройствах. это список устройств http://www.saltwebsites.com/2012/android-accelerometers-screen-off

так что есть способ получить данные датчика акселерометра, когда экран выключен, что работает на всех устройствах?

или есть способ обнаружить движение с использованием других датчиков?

ответ

1

Да, вы можете использовать акселерометр в фоновом режиме или когда экран выключен
но вам нужно провести WakeLock[Link], чтобы предотвратить устройство от сна.

Если вам нужно определить, находится ли устройство в покое или если оно снова начнет двигаться, вас может заинтересовать Recognizing the User's Current Activity от Служб Google.

+0

WaveLock не работает. Является ли «Признание текущей активности пользователя» зависит от подключения к Интернету или это сенсорная вещь? –

+0

Не нужно подключение к Интернету, но я не уверен на 100%. Однако необходимо, чтобы службы Google Play были установлены на устройстве hte. – Plato

1

После быстрых исследований я обнаружил, что большинство устройств Android не отправляют события акселератора, когда экран выключен. Чтобы узнать больше об этой ошибке, пожалуйста, посмотрите на here. Также here тоже.

+0

, так что нет обходного пути, и нет другого способа обнаружения движения, когда экран выключен? –

+0

Я так думаю, но я не уверен, брат @ 7agooz. – Gunaseelan

4

Partial Wake Lock - все, что вам нужно для доступа к показаниям акселерометра, когда экран выключен.

Вы можете использовать его как это:

private PowerManager.WakeLock mWakeLock; 

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
mWakeLock.acquire(); 

И после того, как вы закончите, просто снять блокировку:

mWakeLock.release(); 

Если вы получаете данные акселерометра в Service, можно просто приобрести заблокируйте его onCreate() и отпустите в onDestroy().

+0

не работает над действиями. это должна быть услуга? –

+0

Нет, он должен работать и в Activity. Откуда вы знаете, что это не работает? Если вы уверены, что у вас все в порядке, возможно, это проблема, связанная с устройством, - отметил Гуназелан. – alex

+0

Я тестирую Samsung Galaxy Note II. посмотрите здесь http: // stackoverflow.com/questions/9982433/android-accelometer-not-working-when-screen-is-off-off на ответе, поэтому я задал вопрос :) –

0

Когда экран выключен, процессор переходит в спящий режим, и вы не можете записывать события, не принимая частичный звукосниматель. Я предлагаю вам взять частичный вакелон, когда вы вызываете onPause и отпустите его onResume. Будьте осторожны с wakelocks, они заставляют ваш телефон истощать действительно большое количество энергии, вы должны тщательно их контролировать.

PS: Вы должны приобрести wakelock в методе onPause, потому что если вы попытаетесь позвонить его в другое место, вы, возможно, не сможете его получить, потому что CPU может быть уже закрыт.

+0

Я пробовал это, но и не работал –

Смежные вопросы