Мой опыт работы с GPS заключается в том, что для исправления требуется некоторое время (по крайней мере, на моем устройстве), поэтому я думаю, что вам нужно постоянно держать телефон в режиме ожидания. Когда я играл с моим устройством, я заметил, что мне нужно использовать встроенный музыкальный проигрыватель, чтобы получить исправление, когда экран выключен. Как указал ratchetr, PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE), кажется, является правильным способом предотвращения «требования к музыкальному проигрывателю».
Редактировать: на некоторых устройствах вам также кажется, что вы должны использовать SetPowerRequirement / ReleasePowerRequirement.
Вот пример C #:
public const int PPN_UNATTENDEDMODE = 0x0003;
public const int POWER_NAME = 0x00000001;
public const int POWER_FORCE = 0x00001000;
[DllImport("coredll.dll")]
public static extern bool PowerPolicyNotify(int dwMessage, bool dwData);
[DllImport("coredll.dll", SetLastError = true)]
public static extern IntPtr SetPowerRequirement(string pvDevice, CedevicePowerStateState deviceState, uint deviceFlags, string pvSystemState, ulong stateFlags);
[DllImport("coredll.dll", SetLastError = true)]
public static extern int ReleasePowerRequirement(IntPtr hPowerReq);
public enum CedevicePowerStateState : int
{
PwrDeviceUnspecified = -1,
D0 = 0,
D1,
D2,
D3,
D4,
}
//Keep the GPS and device alive:
PowerPolicyNotify(PPN_UNATTENDEDMODE, true)
IntPtr gpsPowerHandle = SetPowerRequirement("gpd0:", CedevicePowerStateState.D0, POWER_NAME | POWER_FORCE, null, 0);
//Call before exiting your app:
ReleasePowerRequirement(gpsPowerHandle);
PowerPolicyNotify(PPN_UNATTENDEDMODE, false);