我的英语不太好,所以我提前道歉。
我想制作一个在屏幕开启时启动的计时器。它应该一直运行直到屏幕关闭然后停止。
我该怎么做?
答案 0 :(得分:1)
有一个关于处理屏幕开/关事件的好主题:Think Android
而不是启动计时器我宁愿这样做:
int seed;
int step = 1000; // Exactness of timer in ms
long start() {
return (long) System.getCurrentTimeMillis()/step;
}
long read(long seed) {
return ((long) System.getCurrentTimeMillis()/step) - seed;
}
if(/*screen on*/) {
seed = start();
} else if(/*screen off*/) {
Log.d("time", read(seed)*step + " ms");
}
我认为使用初始种子比开始使用真正的种子更加资源友好且更容易。计时器。
答案 1 :(得分:0)
当屏幕关闭时,您的活动会调用 onPause()方法。在该方法中,您可以获取Unix time并将其保存为变量,这样您就不需要使用计时器或任何其他复杂的方法。屏幕继续显示您的活动应用程序后,活动将调用 onResume()方法,您将获得第二个Unix时间。简单地减去这两个变量,将它们转换为秒,你就可以了。
答案 2 :(得分:0)
你需要一个广播接收器用于屏幕。
public class ScreenReceiver extends BroadcastReceiver {
private static final String TAG = "Receiver";
private GregorianCalendar start, end;//or a long in ms
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
start = new GregorianCalendar();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
end = new GregorianCalendar();
}
}
}
从以下开始:
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
ScreenReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);