malavika
malavika

Reputation: 1331

How to set alarm when mobile has been idle using android?

Hi I want to set alarm when the phone hasn't been touched. If the screen hasn't been touched for nearly 2 minutes, the alarm sound would be raised. How can I do this? Can anybody help me? Thanks in advance.

Upvotes: 15

Views: 1826

Answers (3)

avepr
avepr

Reputation: 1896

If I understand your question correctly, you need to trigger an alarm, when there is no any user interaction happened within some time interval. And one of the main requirements, there is no your activity running in foreground. So the case with onUserInteraction doesn't work for you. In this case you still can receive updates on every user action if you make your own AccessibilityService.

Add this to your manifest to declare the service:

 <service android:name=".MyAccessibilityService">
     <intent-filter>
         <action android:name="android.accessibilityservice.AccessibilityService" />
     </intent-filter>
 </service>

And your service implementation should look similar to this:

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!");

}
}

Now any time user touches the screen for example, you will get onAccessibilityEvent() triggered and will be able to restart a timer which will launch your Alarm.

HOWEVER, this approach has one disadvantage: in order to make it working, you will need to go to the phone settings -> Accessibility and enable your application there. Otherwise, system will not launch your service.

Upvotes: 2

Praveenkumar
Praveenkumar

Reputation: 24496

Pass the AlarmService through out the below code. This will find how long your device has been in idle.

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();
    }
}

Hope this helps you.

Upvotes: 5

bhavindesai
bhavindesai

Reputation: 809

You can create AlarmService to play sound even when application/device is idle

Extend method onUserInteraction of Activity Class to reset timer and start again for two minutes.

Upvotes: 3

Related Questions