Как установить будильник, когда мобильный телефон не используется с Android? - PullRequest
15 голосов
/ 24 января 2012

Привет. Я хочу установить будильник, когда к телефону не прикасались. Если экран не касался в течение почти 2 минут, звук будильника будет повышен. Как я могу это сделать? Кто-нибудь может мне помочь? Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 08 февраля 2012

Передайте 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();
    }
}

Надеюсь, это поможет вам.

3 голосов
/ 06 февраля 2012

Вы можете создать AlarmService для воспроизведения звука, даже когда приложение / устройство находится в режиме ожидания

Расширение метода onUserInteraction класса Activity для сброса таймера и повторного запуска в течение двух минут.

2 голосов
/ 09 февраля 2012

Если я правильно понимаю ваш вопрос, вам нужно вызвать тревогу, когда в течение какого-то промежутка времени не произошло никакого взаимодействия с пользователем.И одно из главных требований, чтобы ваша деятельность не шла на передний планПоэтому случай с 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 () и сможете перезапустить таймер, который запустит ваш сигнал тревоги.

ОДНАКО, у этого подхода есть один недостаток: для того, чтобы он работал, вам нужно перейти в настройки телефона -> Доступность и включить там свое приложение.В противном случае система не запустит ваш сервис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...