Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[API расположения Win32 доступен для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. Вместо этого используйте API Windows.Devices.Geolocation . ]
Запрашивает события отчета о расположении.
Синтаксис
HRESULT RegisterForReport(
[in] ILocationEvents *pEvents,
[in] REFIID reportType,
[in] DWORD dwRequestedReportInterval
);
Параметры
[in] pEvents
Указатель на интерфейс обратного вызова ILocationEvents , через который будут получены запрошенные уведомления о событиях.
[in] reportType
GUID , указывающий идентификатор интерфейса для типа отчета, для которого будут получаться уведомления о событиях.
[in] dwRequestedReportInterval
DWORD , указывающий запрошенное затраченное время (в миллисекундах) между уведомлениями о событиях для указанного типа отчета. Если параметр dwRequestedReportInterval равен нулю, минимальный интервал не указан, и приложение запрашивает получение событий в интервале по умолчанию датчика расположения. См. заметки.
Возвращаемое значение
Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
| Код возврата | Описание |
|---|---|
|
Метод выполнен успешно. |
|
параметр reportType отличается от IID_ILatLongReport или IID_ICivicAddressReport. |
|
reportType уже зарегистрирован. |
Комментарии
Интервал, запрашиваемый с помощью параметра dwRequestedReportInterval , представляет собой кратчайший промежуток времени между событиями. Это означает, что вы запрашиваете уведомления о событиях не чаще, чем указано, но затраченное время может быть значительно больше. Используйте параметр dwRequestedReportInterval , чтобы уведомления о событиях не использовали больше ресурсов процессора, чем необходимо.
Поставщику расположения не требуется предоставлять отчеты в запрашиваемом интервале. Вызовите Метод GetReportInterval , чтобы обнаружить истинный параметр интервала отчета.
Приложения, которым необходимо получить данные о расположении только один раз, чтобы заполнить форму или разместить расположение пользователя на карте, должны зарегистрироваться для получения событий и дождаться первого события отчета, как описано в разделе Ожидание отчета о расположении.
Примеры
В следующем примере вызывается метод RegisterForReport для подписки на события.
#include <windows.h>
#include <atlbase.h>
#include <atlcom.h>
#include <LocationApi.h> // This is the main Location API header
#include "LocationCallback.h" // This is our callback interface that receives Location reports.
class CInitializeATL : public CAtlExeModuleT<CInitializeATL>{};
CInitializeATL g_InitializeATL; // Initializes ATL for this application. This also does CoInitialize for us
int wmain()
{
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);;
if (SUCCEEDED(hr))
{
CComPtr<ILocation> spLocation; // This is the main Location interface
CComObject<CLocationEvents>* pLocationEvents = NULL; // This is our callback object for location reports
IID REPORT_TYPES[] = { IID_ILatLongReport }; // Array of report types of interest. Other ones include IID_ICivicAddressReport
hr = spLocation.CoCreateInstance(CLSID_Location); // Create the Location object
if (SUCCEEDED(hr))
{
hr = CComObject<CLocationEvents>::CreateInstance(&pLocationEvents); // Create the callback object
if (NULL != pLocationEvents)
{
pLocationEvents->AddRef();
}
}
if (SUCCEEDED(hr))
{
// Request permissions for this user account to receive location data for all the
// types defined in REPORT_TYPES (which is currently just one report)
if (FAILED(spLocation->RequestPermissions(NULL, REPORT_TYPES, ARRAYSIZE(REPORT_TYPES), FALSE))) // FALSE means an asynchronous request
{
wprintf(L"Warning: Unable to request permissions.\n");
}
// Tell the Location API that we want to register for reports (which is currently just one report)
for (DWORD index = 0; index < ARRAYSIZE(REPORT_TYPES); index++)
{
hr = spLocation->RegisterForReport(pLocationEvents, REPORT_TYPES[index], 0);
}
}
if (SUCCEEDED(hr))
{
// Wait until user presses a key to exit app. During this time the Location API
// will send reports to our callback interface on another thread.
system("pause");
// Unregister from reports from the Location API
for (DWORD index = 0; index < ARRAYSIZE(REPORT_TYPES); index++)
{
spLocation->UnregisterForReport(REPORT_TYPES[index]);
}
}
// Cleanup
if (NULL != pLocationEvents)
{
pLocationEvents->Release();
pLocationEvents = NULL;
}
CoUninitialize();
}
return 0;
}
Требования
| Требование | Значение |
|---|---|
| Минимальная версия клиента | Windows 7 [только классические приложения],Windows 7 |
| Минимальная версия сервера | Ни одна версия не поддерживается |
| Целевая платформа | Windows |
| Header | locationapi.h |
| DLL | LocationAPI.dll |