我有一个android应用程序,它有一个服务,根据一些时间计算触发警报。
问题是时区发生变化时(即:对于位于法国并从utc+1转到utc+2的用户)。应用程序不会收到有关此更改的通知,因此会延迟触发警报。
我已经检查了android时区api,并且知道有一些方法可以提供帮助,例如:
使用DaylightTime()
indaylighttime(日期时间)
getdstsavings()
有没有可能知道什么时候会发生变化,以便在我的计算算法中加以考虑?
顺便说一句:我已经查看了很多博客和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);
}
}
}
1条答案
按热度按时间kknvjkwl1#
我是这样解决这个问题的:
1-我保持了android清单的原样(见问题)
2-然后我把接收器换了一点:
3-以下是计算新时区和dst使用的方法:
就这样。因此,解决方案是将所有api(在问题中列出)组合在一起。
我希望这个解决方案能帮助其他人。如果你有任何问题,请发表评论