Как установить будильник, когда мобильный телефон работает без участия Android?
Привет. Я хочу установить будильник, когда телефон не был затронут. Если экран не коснулся почти 2 минуты, звук будильника будет поднят. Как я могу это сделать? Кто-нибудь может мне помочь?
Заранее спасибо.
Ответы
Ответ 1
Передайте AlarmService через приведенный ниже код. Это покажет, как долго ваше устройство находится в режиме ожидания.
idle.java
Handler hl_timeout = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
hl_timeout.postDelayed(DoOnTimeOut, 15000);
}catch(Exception e)
{
e.printStackTrace();
}
}
// Toast
Thread DoOnTimeOut = new Thread() {
public void run() {
try{
Toast.makeText(getApplicationContext(), "System is idle", Toast.LENGTH_LONG).show();
}catch(Exception e)
{
e.printStackTrace();
}
}
};
@Override
public void onUserInteraction()
{
super.onUserInteraction();
//Remove any previous callback
try{
hl_timeout.removeCallbacks(DoOnTimeOut);
hl_timeout.postDelayed(DoOnTimeOut, 15000);
}catch(Exception e)
{
e.printStackTrace();
}
}
Надеюсь, это поможет вам.
Ответ 2
Вы можете создать AlarmService для воспроизведения звука, даже когда приложение/устройство не работает
Расширьте метод onUserInteraction класса активности до таймера reset и начните снова в течение двух минут.
Ответ 3
Если я правильно понял ваш вопрос, вам нужно вызвать сигнал тревоги, когда в течение некоторого интервала времени не происходит никакого взаимодействия с пользователем. И одно из основных требований, на вашем рабочем столе нет вашей активности. Поэтому случай с onUserInteraction не работает для вас.
В этом случае вы все равно можете получать обновления для каждого действия пользователя, если вы создаете свой собственный AccessibilityService.
Добавьте это в свой манифест, чтобы объявить службу:
<service android:name=".MyAccessibilityService">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
</service>
И ваша реализация сервиса должна выглядеть примерно так:
public class MyAccessibilityService extends AccessibilityService
{
@Override
public void onServiceConnected() {
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
// we are interested in all types of accessibility events
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
// we want to receive events in a certain interval
info.notificationTimeout = 100;
setServiceInfo(info);
Log.e("ALEX", "service connected!");
}
@Override
public void onAccessibilityEvent(AccessibilityEvent arg0)
{
Log.e("ALEX", "Event happened!");
}
}
Теперь, когда пользователь иногда касается экрана, например, вы активируете onAccessibilityEvent() и сможете перезапустить таймер, который запустит ваш Тревога.
ОДНАКО, этот подход имеет один недостаток: для того, чтобы он работал, вам нужно перейти к настройкам телефона → Доступность и включить приложение. В противном случае система не будет запускать вашу службу.