Méthode ILocation ::RegisterForReport (locationapi.h)
[L’API d’emplacement Win32 est disponible pour une utilisation dans les systèmes d’exploitation spécifiés dans la section Configuration requise. Il sera peut-être modifié ou indisponible dans les versions ultérieures. Utilisez plutôt l’API Windows.Devices.Geolocation . ]
Demande des événements de rapport d’emplacement.
Syntaxe
HRESULT RegisterForReport(
[in] ILocationEvents *pEvents,
[in] REFIID reportType,
[in] DWORD dwRequestedReportInterval
);
Paramètres
[in] pEvents
Pointeur vers l’interface de rappel ILocationEvents via laquelle les notifications d’événements demandées seront reçues.
[in] reportType
GUID qui spécifie l’ID d’interface du type de rapport pour lequel recevoir des notifications d’événement.
[in] dwRequestedReportInterval
DWORD qui spécifie le temps écoulé demandé, en millisecondes, entre les notifications d’événements pour le type de rapport spécifié. Si dwRequestedReportInterval est égal à zéro, aucun intervalle minimal n’est spécifié et votre application demande de recevoir des événements à l’intervalle par défaut du capteur d’emplacement. Consultez la section Notes.
Valeur de retour
Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Code de retour | Description |
---|---|
|
S_OK |
|
reportType n’est pas IID_ILatLongReport ou IID_ICivicAddressReport. |
|
reportType est déjà inscrit. |
Remarques
L’intervalle que vous demandez à l’aide du paramètre dwRequestedReportInterval représente la durée la plus courte entre les événements. Cela signifie que vous demandez à recevoir des notifications d’événements pas plus fréquemment que spécifié, mais que le temps écoulé peut être considérablement plus long. Utilisez le paramètre dwRequestedReportInterval pour vous assurer que les notifications d’événements n’utilisent pas plus de ressources de processeur que nécessaire.
Le fournisseur d’emplacement n’est pas tenu de fournir des rapports à l’intervalle que vous demandez. Appelez GetReportInterval pour découvrir le paramètre d’intervalle de rapport réel.
Les applications qui n’ont besoin d’obtenir des données de localisation qu’une seule fois, pour remplir un formulaire ou placer l’emplacement de l’utilisateur sur une carte, doivent s’inscrire aux événements et attendre le premier événement de rapport, comme décrit dans En attente d’un rapport de localisation.
Exemples
L’exemple suivant appelle RegisterForReport pour s’abonner aux événements.
#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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 7 [applications de bureau uniquement],Windows 7 |
Serveur minimal pris en charge | Aucun pris en charge |
Plateforme cible | Windows |
En-tête | locationapi.h |
DLL | LocationAPI.dll |