【发布时间】:2016-07-15 05:09:24
【问题描述】:
我有一个 android 应用程序,它有一个服务女巫根据一些时间计算触发警报。
问题出在时区更改时(即:对于位于法国并从 UTC+1 变为 UTC+2 的用户)。应用程序不会收到有关此更改的通知,因此它会延迟触发警报。
我已经检查过 android TimeZone API 并且知道有一些方法可以提供帮助,例如:
是否有可能知道更改何时发生,以便在我的计算算法中考虑它?
顺便说一句:我已经查看了很多来自 Stackoverflow 的博客和问答,但是 不要帮忙:(
编辑(清单文件和接收器类):
这是我的清单:
<receiver android:name=".receiver.NotificationReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
</receiver>
接收器类:
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
WakeLock.acquire(context);
Intent service = new Intent(context, NotificationService.class);
service.putExtras(intent);
context.startService(service);
// Timezone or time change
if (intent.getAction() != null
&& (intent.getAction().equals(Intent.ACTION_TIME_CHANGED)
|| intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)))
{
Intent i = new Intent(context, DialogPopUpTimeChange.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
【问题讨论】:
-
不,这不是重复的,因为我已经尝试使用 BroadcastReceiver 但没有帮助。我想知道时区更改将何时发生
-
你没有在你的问题中这么说。当时间变化时,为什么不能使用 BroadcastReceiver 来更新警报?
-
您在我添加详细信息时发表了评论 :) 对于广播接收器,如果电信公司进行了更改,它不会收到任何信息。这就是为什么我正在寻找另一种选择。
-
您的结果与其他答案声称的相反。时间变化广播可以经常触发,一天几次,甚至一分钟多次,这取决于设备必须与运营商重新同步的频率。我已经看到了几种不同的解决方法来检测“真正的”DST 更改。甚至声称
AlarmManager会自动处理夏令时更改。但我找不到任何关于未收到广播的报告。也许您没有正确注册它们。您能出示您的注册清单/代码吗?