5

我想制作一个计时器,它在 Android 设备被唤醒时开始计数,并在 Android 设备设置为睡眠时停止。我什么也没发现,唤醒/睡眠如何触发活动。

我希望你能帮我解决我的问题

4

4 回答 4

1

使用BroadcastReceiver和服务来捕捉 Screen_on 和_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);
    }
}
于 2012-11-18T19:22:52.120 回答
1

我使用了一个像 timonvlad 说的 BroadcastReceiver 但是 ACTION_SCREEN_ON 和 ACTION_SCREEN_OFF 不能被 XML 调用,所以我创建了一个服务。该服务必须在 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();
}
}
于 2012-11-24T19:06:37.737 回答
0

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

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

于 2012-11-18T19:15:23.843 回答
0

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

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

然后捕捉这些警报并增加您的计时器计数器,它将在设备唤醒时计数。

设备唤醒时不要开始活动。用户不会对应用程序的这种行为感到满意。改为使用通知。

于 2012-11-18T19:57:51.010 回答