# 代码示例

Source: [https://docs.qualcomm.com/doc/80-PK177-134Y/topic/location_pp_sample_code.html](https://docs.qualcomm.com/doc/80-PK177-134Y/topic/location_pp_sample_code.html)

## Java

**需要导入**

    import com.qualcomm.qti.qesdkIntf.IQesdk;
    import com.qualcomm.qti.qesdk.QesdkStatusException;
    import com.qualcomm.qti.qesdk.Location.PP_eDGNSSUDT;
    import com.qualcomm.qti.qesdk.Location.PP_RTKUDT;
    import com.qualcomm.qti.qesdk.Location.IPP_RTKCBs;
    import com.qualcomm.qti.qesdk.Location.IPP_eDGNSSCBs;
    import com.qualcomm.qti.qesdk.Location.PP_RTKEnums;
    import com.qualcomm.qti.qesdk.Location.PP_RTKManager;
    import com.qualcomm.qti.qesdk.Location.PP_eDGNSSEnums;
    import com.qualcomm.qti.qesdk.Location.PP_eDGNSSManager;Copy to clipboard

**声明需要对象**

    private IQesdk mQesdkManager;
    private PP_eDGNSSManager mPpeEdgnssManager;
    private PP_RTKManager mPpeRtkManager;Copy to clipboard

**创建 QESDK 管理器实例并进行初始化**

    mQesdkManager = IQesdk.createInstance(this);
    int statusId = qesdkManager.init(eventCallbackHandler);Copy to clipboard

**根据需要创建 eDGNSS 或 RTK 管理器实例**

    mPpeEdgnssManager = new PP_eDGNSSManager(mQesdkManager);
    mPpeRtkManager = new PP_RTKManager(mQesdkManager);Copy to clipboard

**设置回调**

    IQesdkEventCallBack eventCallbackHandler = new IQesdkEventCallBack() {
          @Override
          public void onEvent(int opcode, int[] subsys) {
          // Handle QESDK event
          }
          };
          
          // For Checking eDGNSS/ RTK precise positioning Capabilities 
          private IPP_eDGNSSCBs.ILocationCapabilitiesCallback locationCapabilitiesCallback = new IPP_eDGNSSCBs.ILocationCapabilitiesCallback() {
          @Override
          public void onValues(long l) {
          // Check precise positioning Capabilities
          }
          };

          // For controlling correction data streaming to Precise Positioning engine
          private IPP_eDGNSSCBs.ICorrectionStreamingControlCallback streamingControlCallback = new IPP_eDGNSSCBs.ICorrectionStreamingControlCallback() {
          @Override
          public void onValues(PP_eDGNSSEnums.CorrectionStreamingState correctionStreamingState) {
          // Start or Stop correction data streaming as requested
          }
          };
          
          // For handling location reports
          private IPP_eDGNSSCBs.ILocationReportCallback eDgnssLocationReportCallback = new IPP_eDGNSSCBs.ILocationReportCallback() {
          @Override
          public void onValues(PP_eDGNSSUDT.Location location) {
          // Handle eDGNSS location report callback
          }
          };
          
          private IPP_RTKCBs.ILocationReportCallback rtkLocationReportCallback = new IPP_RTKCBs.ILocationReportCallback() {
          @Override
          public void onValues(PP_RTKUDT.Location location) {
          // Handle RTK location report callback        
          }
          };Copy to clipboard

**获取位置功能**

    registerLocationCapabilitiesCallback(locationCapabilitiesCallback)Copy to clipboard

**更新原生 NTRIP 客户端的 NTRIP GGA 许可（仅限 OEM 应用程序）**

    mPpeEdgnssManager.updateNTRIPGGAConsent(ntripGgaConsent);Copy to clipboard

**如有需要，配置原生 NTRIP 客户端（仅限 OEM 应用程序）**

    // enable Native NTRIP client
    mPpeEdgnssManager.enablePPENtripStream(
          hostNameOrIp, mountPoint,
          username, password, port,
          requiresNmeaLocation, useSSL,
          enableRTKEngine);
          
    // Disable Native NTRIP client
    mPpeEdgnssManager.disablePPENtripStream();Copy to clipboard

**注册为校正数据提供程序**

    mPpeEdgnssManager.registerAsCorrectionDataSource(
    correctionDataType, streamingControlCallback);Copy to clipboard

**取消作为校正数据提供程序的注册**

    mPpeEdgnssManager.deRegisterAsCorrectionDataSource();Copy to clipboard

**发送精确位置更新请求**

    mPpeEdgnssManager.requestPreciseLocationUpdates(
                minIntervalMillis, eDgnssLocationReportCallback);Copy to clipboard

 或 

    mPpeRtkManager.requestPreciseLocationUpdates(
          minIntervalMillis, rtkLocationReportCallback);Copy to clipboard

**删除精确位置更新请求**

    mPpeEdgnssManager.removePreciseLocationUpdates(eDgnssLocationReportCallback)Copy to clipboard

或 

    mPpeRtkManager.removePreciseLocationUpdates(rtkLocationReportCallback)Copy to clipboard

**收到 StreamingControlCallback 以开始校正数据注入时，从应用程序 NTRIP 客户端下载校正数据然后注入。**

    mPpeEdgnssManager.injectCorrectionData(correctionData);Copy to clipboard

**接收注册的 ILocationReportCallback 中的精确位置报告。**

## 原生

**需要包括的内容**

    #include "qesdk_ndk.h"
    #include "qesdk_Location_PP_eDGNSS.h"
    #include "qesdk_Location_PP_RTK.h"Copy to clipboard

**初始化**

    qesdk_handle_t qesdk_handle = qesdk_init(nativeLicense, len, event_callback_handler);
    PP_RTKManager *rtkManager = new PP_RTKManager();
    PP_eDGNSSManager *edgnssManager = new PP_eDGNSSManager();
    int ret = rtkManager->init(nativeLicense, len, event_callback_handler);
    ret = edgnssManager->init(nativeLicense, len, event_callback_handler);Copy to clipboard

**设置回调**

    void event_callback_handler(uint32_t opcode, uint32_t subsys[]) {
          // Callback to handle QESDK events
          }

    void location_capabilities_callback(uint64_t capabilitiesMask){
          // Check precise positioning Capabilities
          }
          
    void edgnss_CorrectionStreamingControlCallback(pp_edgnss_CorrectionStreamingState streamingState){
          // Start or Stop correction data streaming as requested
          }
          
    void edgnss_LocationReportCallback(pp_edgnss_Location location){
          // Handle eDGNSS location report callback
          }
          
    void rtk_LocationReportCallback(pp_rtk_Location location){
          // Handle RTK location report callback
          }Copy to clipboard

**获取位置功能**

    ret = edgnssManager->registerLocationCapabilitiesCallback(location_capabilities_callback);Copy to clipboard

**更新原生 NTRIP 客户端的 NTRIP GGA 许可（仅限 OEM 应用程序）**

    ret = edgnssManager->updateNTRIPGGAConsent(ntrip_gga_consent);Copy to clipboard

**如有需要，配置原生 NTRIP 客户端（仅限 OEM 应用程序）**

    // enable Native NTRIP client
    ret = edgnssManager->enablePPENtripStream(hostNameIP, mountPoint, userName, pass, server_port, require_nmealocation, use_ssl, enable_rtkengine);
    // Disable Native NTRIP client
    ret = edgnssManager->disablePPENtripStream();Copy to clipboard

**注册为校正数据提供程序**

    ret = edgnssManager->registerAsCorrectionDataSource((pp_edgnss_CorrectionDataType)correction_data_type, edgnss_CorrectionStreamingControlCallback);Copy to clipboard

**取消作为校正数据提供程序的注册**

    ret = edgnssManager->deRegisterAsCorrectionDataSource();Copy to clipboard

**发送精确位置更新请求**

    ret = edgnssManager->requestPreciseLocationUpdates(min_interval_ms, edgnss_LocationReportCallback); Copy to clipboard

或 

    ret = rtkManager->requestPreciseLocationUpdates(min_interval_ms, rtk_LocationReportCallback);Copy to clipboard

**删除精确位置更新请求**

    ret = edgnssManager->removePreciseLocationUpdates(edgnss_LocationReportCallback);Copy to clipboard

或 

    ret = rtkManager->removePreciseLocationUpdates(rtk_LocationReportCallback);Copy to clipboard

**收到 StreamingControlCallback 以开始校正数据注入时，从应用程序 NTRIP 客户端下载校正数据然后注入。**

    ret = edgnssManager->injectCorrectionData(corr_data);Copy to clipboard

**接收注册的 ILocationReportCallback 中的精确位置报告。**

**Parent Topic:** [位置 API（精确定位）](https://docs.qualcomm.com/doc/80-PK177-134Y/topic/location.html)

Last Published: Jun 22, 2023

[Previous Topic
位置报告](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134Y/topics/location_report.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134Y/topics/appx_references.md)