移动设备闲置时使用android如何设置闹钟?

时间:2012-01-24 10:11:15

标签: java android alarm

嗨我想在未触摸手机时设置闹钟。如果屏幕未被触摸近2分钟,则会发出警报声。我怎样才能做到这一点?有谁能够帮我? 提前致谢。

3 个答案:

答案 0 :(得分:5)

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

希望这会对你有所帮助。

答案 1 :(得分:3)

即使应用程序/设备处于空闲状态,您也可以创建AlarmService来播放声音

将活动类的onUserInteraction方法扩展为重置计时器并再次启动两分钟。

答案 2 :(得分:2)

如果我正确理解您的问题,则需要在某个时间间隔内没有发生任何用户交互时触发警报。并且其中一个主要要求是,您的活动没有在前台运行。所以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(),并且可以重新启动计时器,启动闹钟。

但是,这种方法有一个缺点:为了使其正常工作,您需要转到手机设置 - &gt;可访问性并在那里启用您的应用程序否则,系统将无法启动您的服务。