我尝试做的事情应该非常简单,如果当前时间在指定时间之前或之后(通过),我会调用 IntentService定期在后台检查作为MainActivity意图中的额外内容)并在发生时收到通知。
在Thread的run()方法中,我得到一个当前时间的实例,并在重新运行之前将其用作 if / else 结构中之前指定的实例。线。 问题是它始终用于"否则"即使当前时间在另一个之后。这个问题太奇怪了,任何人都可以解释一下错误在哪里?
这是我的IntentService类:
public class MyCheck extends IntentService {
int hour = 0; int minute = 0;
int i = 0;
private static final String TAG = "Check";
int hourNow;
int minuteNow;
Handler handler = new Handler();
public MyCheck() {
super(MyCheck.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
Log.w(TAG, "Service Started!");
hour = intent.getIntExtra("hour", 0);
minute = intent.getIntExtra("minute", 0);
Log.w(TAG, "Step 1 ");
Thread runnable = new Thread() {
@Override
public void run() {
/* do what you need to do */
Log.w(TAG, "Step 2 ");
/* get current time */
Calendar c = Calendar.getInstance();
hourNow = c.get(Calendar.HOUR);
minuteNow = c.get(Calendar.MINUTE);
//HERE, IT SEEMS THAT IT'S ALWAYS BEFORE hour AND minute
if(hourNow > hour || (hourNow == hour && minuteNow > minute)) {
//SEND
Log.w(TAG, "RUN ");
Intent broadcast = new Intent();
broadcast.setAction(NOTIFICATION_SERVICE);
sendBroadcast(broadcast);
handler.removeCallbacks(this);
}
else {
//NOTHING
i++;
Log.w(TAG, "NOT YET " + i);
}
//REPEAT EVERY 6 SECONDS
try {
sleep(6000);
handler.post(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
runnable.start();
}
}
修改
我已经找到了一个小问题,你可以在下面的答案中看到。 如果有人想要完成答案,并提供有关在构建过程中可能出现的问题的更多信息,那么这些信息将会被贬低。 TIA
答案 0 :(得分:0)
对此的简单解决方案是等待并重新启动Windows。毕竟代码没有缺陷,它只是构建过程中需要一些时间告诉编译器错误不存在的东西:可能在过去的缓存中有一个副本仍然考虑到的错误,我不确定。
也许您可以在我的上一个声明中添加一些信息,发布答案或评论。