如何在不强制用户打开应用的情况下设置本地通知。 我需要我的应用程序设置日出和日落的本地通知,但我不想要求人们打开应用程序。 我知道我最多可以通过 scheduleLocalNotification 获得64个通知,但我需要将其设置为一年,这样我就可以在后台运行应用程序,并为后续的日出和日落设置警报。 / p>
答案 0 :(得分:1)
简单的答案是你不能。您的应用无法在后台运行;它无法安排计时器自行唤醒以在到期时发布更多通知。
你可以接近这样的事情的唯一方法是让一台服务器向你的应用发送一个后台推送通知作为一个叫醒电话,当一批新的64个通知接近需要发布时。 然而,这将取决于用户不终止您的应用程序的事实。如果用户这样做,则您必须向用户发送非后台推送通知,并希望他们点击它以启动您的应用。
答案 1 :(得分:1)
Android Awareness API具有recently announced个新功能,可为您的用例提供简单的解决方案(避免您必须明确管理位置请求或计算日出时间)。实现您要做的事情的方法是创建并注册相对于日出/日落的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
时,您将收到回调。
请查看Fence API code snippets个文档,了解如何添加自定义应用逻辑。