【问题标题】:How to set alarm when mobile has been idle using android?手机闲置时如何使用android设置警报?
【发布时间】:2012-02-17 14:12:54
【问题描述】:

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

【问题讨论】:

  • 你有检测用户两分钟没有触摸屏幕的部分吗? - 看起来很棘手:stackoverflow.com/questions/4208730/…
  • 你的意思是说像屏保吗?
  • 不,不是那样的。我的意思是我想在我的应用程序空闲 30 秒时设置警报。就是这样。

标签: java android alarm


【解决方案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 以在应用程序/设备空闲时播放声音

    扩展Activity类的onUserInteraction方法,重置定时器,重新启动两分钟。

    【讨论】:

      【解决方案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(),并能够重新启动计时器,该计时器将启动您的闹钟。

      但是,这种方法有一个缺点:为了使其正常工作,您需要转到手机设置 -> 辅助功能并在那里启用您的应用程序。否则系统不会启动你的服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 2016-06-30
        相关资源
        最近更新 更多