在Android中唤醒/睡眠时启动活动

时间:2012-11-18 19:09:35

标签: android

我想制作一个计时器,当Android设备被唤醒时开始计时,并在Android设备设置为休眠时停止计时。我什么都没发现,活动是如何被触发的 醒来/睡觉。

我希望你能解决我的问题

4 个答案:

答案 0 :(得分:1)

使用BroadcastReceiver和服务来捕捉Screen_on and_off ....例如...

public class InternetReceiver extends BroadcastReceiver{
    private boolean screenOff;
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            screenOff = true;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOff = false;
        }
        Intent i = new Intent(context, InternetService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);
    }
}

答案 1 :(得分:1)

我使用了像timonvlad那样的BroadcastReceiver,但是XML无法调用ACTION_SCREEN_ON和ACTION_SCREEN_OFF,所以我创建了一个服务。该服务必须在XML中注册,然后我使用此代码

public class OnOffReceiver extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    registerReceiver(new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
                        //This happens when the screen is switched off
          }
        }, new IntentFilter(Intent.ACTION_SCREEN_OFF));


    registerReceiver(new BroadcastReceiver() {

          public void onReceive(Context context, Intent intent) {
                          //This happens when the screen is turned on and screen lock deactivated
          }
        }, new IntentFilter(Intent.ACTION_USER_PRESENT));

    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}
}

答案 2 :(得分:0)

您应该创建一个侦听ACTION_BOOT_COMPLETED意图的BroadcastReceiver。 在实现中,您必须存储接收该意图的时间戳。

之后,您可以创建一个检索该时间戳的活动,并计算手机运行的时间。

答案 3 :(得分:0)

设置在设备唤醒时将触发的重复事件:

AlarmManager.setRepeating(AlarmManager.RTC, time, period, pendingIntent);

然后捕捉这些警报并递增计时器计数器,它将在设备清醒时进行计数。

设备唤醒时不要启动活动。用户不会对应用的此类行为感到满意。改为使用通知。