设置应用程序closures时报警

我如何设置本地通知,强迫用户打开应用程序。 我需要我的应用程序为日出和日落设置本地通知,但我不想问人打开应用程序。 我知道我可以通过scheduleLocalNotification多达64个通知,但我需要设置它一年,所以我应该能够在后台运行的应用程序,并为未来的日出和日落在后台设置警报。

简单的答案是你不能。 您的应用无法在后台运行, 它不能安排一个计时器唤醒自己,以便在到期时发布更多通知。

唯一可以接近这样的事情的方法是让一个服务器发送一个后台推送通知给你的应用程序作为唤醒呼叫,当一批64个通知接近需要发布。 但是,这将依靠用户不终止您的应用程序的事实。 如果用户这样做,那么你必须发送一个非背景推送通知给用户,并希望他们点击它来启动你的应用程序。

Android Awareness API 最近宣布了一些新function,为您的用例提供了一个简单的解决scheme(避免您必须明确地pipe理位置请求或计算日出时间)。 实现你想要做的事情的方法是创build并注册相对于日出/日落指定的TimeFence

例如:

 // Create TimeFence AwarenessFence sunriseFence = TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE, 0, 5 * ONE_MINUTE_MILLIS); // Register fence with Awareness. Awareness.FenceApi.updateFences( mGoogleApiClient, new FenceUpdateRequest.Builder() .addFence("fenceKey", sunriseFence, myPendingIntent) .build()) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { Log.i(TAG, "Fence was successfully registered."); } else { Log.e(TAG, "Fence could not be registered: " + status); } } }); 

当日出时围栏评估为TRUE ,日出后5分钟评估为FALSE时,您将获得callback。

请查看Fence API代码片段文档,了解如何添加自定义应用逻辑。