As we know, the device suspended status always closes some devices, like Bluetooth or GPS to save power. This is designed by the OEM. You can't keep GPS hardware on while the device is in standby. If you want to keep GPS alive all the time, you can use the SystemIdleTimerReset API to reset the standby time. The default behavior is to go into a suspended state after a specified period of time expires. This time interval is specified in the registry. Calling SystemIdleTimerReset overrides the registry setting by resetting the timer.
On the other hand, you can use the CERunAppAtTime API to wake up a suspended device at a special time.