zoukankan      html  css  js  c++  java
  • GpsLocationProvider中的sendExtraCommand方法

    Android系统源码中GpsLocationProvider类中包含sendExtraCommand方法,代码如下

     1  @Override
     2     public boolean sendExtraCommand(String command, Bundle extras) {
     3 
     4         long identity = Binder.clearCallingIdentity();
     5         boolean result = false;
     6 
     7         if ("delete_aiding_data".equals(command)) {
     8             result = deleteAidingData(extras);
     9         } else if ("force_time_injection".equals(command)) {
    10             sendMessage(INJECT_NTP_TIME, 0, null);
    11             result = true;
    12         } else if ("force_xtra_injection".equals(command)) {
    13             if (mSupportsXtra) {
    14                 xtraDownloadRequest();
    15                 result = true;
    16             }
    17         } else {
    18             Log.w(TAG, "sendExtraCommand: unknown command " + command);
    19         }
    20 
    21         Binder.restoreCallingIdentity(identity);
    22         return result;
    23     }

    方法有三个参数:一个字符串用于指定位置提供者、一个附加的命令以及一个提供命令执行信息的Bundle 对象。

    GPS 位置提供者支持以下三个附加命令:

    delete_aiding_data

    force_time_injection

    force_extra_injection

    delete_aiding_data 命令用于删除先前已下载的A-GPS 数据。这是唯一使用Bundle 参数的附加命令,Bundle 用于控制要删除的A-GPS 数据。Bundle 可以包含布尔型的键值对来指明要移除的数据。可用的键字符串如下所示:

    ephemeris

    almanac

    position

    time

    iono

    utc

    health

    svdir

    scsteer

    sadata

    rti

    celldb-info

    all

    传递一个空的Bundle 会删除所有的A-GPS 数据。

    force_time_injection 命令从配置的NTP 服务器检索当前时间并进行更新,用来进行GPS 计算。

    force_extra_injection 命令从一个配置服务器中下载A-GPS 数据,这些数据将被GPS位置提供者使用。

    使用示例

    1 LocationManager locationmanager = (LocationManager)context.getSystemService("location");  
    2         Bundle bundle = new Bundle();  
    3         locationmanager.sendExtraCommand("gps", "force_xtra_injection", bundle); //快速定位command  
    4         locationmanager.sendExtraCommand("gps", "force_time_injection", bundle);  
    5         locationmanager.sendExtraCommand("gps", "delete_aiding_data", bundle); //冷启动 

    相关知识

    星历(Ephemeris)与历书(Almanac)

       为了缩短卫星锁定时间,GPS接收机需利用历书、当地位置的时间来预报卫星运行状态。

       历书与星历都是表示卫星运行的参数。历书包括全部卫星的大概位置,用于卫星预报;星历只是当前接收机观测到的卫星的精确位置,用于定位。

       1)cold(冷启动):没有之前的位置信息,没有星历,没有时间的估算。这种情况发生在初次使用定位时或电池没电导致星历丢失时。关机状态下将接收机移动200公里以上距离。

       2)warm(温启动):有历书信息,大致的位置和时间可知,没有星历信息。这种情况发生在本次定位距离上次超过两个小时时。

       3)hot(热启动):有星历信息,大致的时间和位置可知,通常比温启动的时间和位置信息精确。这种情况发生在本次定位与上次定位的时间间隔小于两个小时时。

    sendExtraCommand

  • 相关阅读:
    招聘ASP.NET(C#)开发人员(已经截止,谢谢大家支持)
    VisualStudioCode开发Vue
    全局异常处理机制(Filter拦截器对比)
    工程师
    kubernetes(k8s)里面部署服务器集群并访问项目
    webpack 就是前端模块化打包工具
    Visual Studio Code配置C/C++开发环境
    docker和k8s(Kubernetes)是配套使用
    kettle 多表全删全插同步数据
    wireshark 抓HTTPS 的包 HTTPS = TLS + HTTP TLSv1.2 协议
  • 原文地址:https://www.cnblogs.com/l2rf/p/5113326.html
Copyright © 2011-2022 走看看