Settings alarms while app is closed
Asked Answered
T

2

1

How can I set local notifications with out forcing user to open app. I need my app set a local notification for sunrise and sunset, but I don't want to ask people open app. I know I can have up to 64 notifications via scheduleLocalNotification, but I need to set it for a year so I should be able to run app in background and set alarms for future sunrises and sunsets in background.

Tineid answered 17/4, 2014 at 20:58 Comment(0)
N
1

The simple answer is you can't. Your app can't run whenever it wants in the background; it can't schedule a timer to wake itself up to post more notifications when they are due.

The only way you could come close to something like this is by having a server which send a background push notification to your app as a wake-up call when a new batch of 64 notifications are coming close to needed to be posted. However this would be relying on the fact the user doesn't terminate your app. If the user does then you'd have to send a non-background push notification to the user and hope they click on it to launch your app.

Nightfall answered 17/4, 2014 at 21:13 Comment(0)
B
1

Android Awareness API has recently announced new features that provide a simple solution for your use-case (that avoids you having to explicitly manage location request or computing sunrise times). The way to achieve what you're trying to do is to create and register a TimeFence specified relative to sunrise/sunset.

For example:

// 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);
            }
        }
    });

You will get callbacks when the fence evaluates to TRUE at sunrise, and when it evaluates back to FALSE at 5-min after sunrise.

Please check Fence API code snippets docs for how to add your custom app logic.

Bosanquet answered 1/9, 2017 at 4:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.