我想制作一个计时器,它在 Android 设备被唤醒时开始计数,并在 Android 设备设置为睡眠时停止。我什么也没发现,唤醒/睡眠如何触发活动。
我希望你能帮我解决我的问题
我想制作一个计时器,它在 Android 设备被唤醒时开始计数,并在 Android 设备设置为睡眠时停止。我什么也没发现,唤醒/睡眠如何触发活动。
我希望你能帮我解决我的问题
使用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);
}
}
我使用了一个像 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();
}
}
您应该创建一个侦听ACTION_BOOT_COMPLETED意图的 BroadcastReceiver。在实现中,您必须存储收到该意图的时间戳。
之后,您可以创建一个活动来检索该时间戳,并计算手机运行了多少时间。
设置设备唤醒时将触发的重复事件:
AlarmManager.setRepeating(AlarmManager.RTC, time, period, pendingIntent);
然后捕捉这些警报并增加您的计时器计数器,它将在设备唤醒时计数。
设备唤醒时不要开始活动。用户不会对应用程序的这种行为感到满意。改为使用通知。