修改Android OS操作系统的代码,自动请求AGPS

背景:现在Android OS系统,在开机时,第一次网络可用时,仅仅请求一次HTTP辅助芯片

 因此我们想修改成,网络只用时就随时更新AGPS;同时从后台切换到前台请求;同时不定位时请求等等这些问题!

真对这些问题,修改如下框架Framework代码

 修改类GPSLocationProvider 框架类

1.      修改Class GPSLocationProvider.java中,让网络状态从“不可用”却换到“可以“状态时自动请求网络【不再限制为1次】

修改原有逻辑

  case DOWNLOAD_XTRA_DATA_FINISHED:
                    mDownloadXtraDataPending = STATE_IDLE;
                    break;

修改为:mDownloadXtraDataPending = STATE_PENDING_NETWORK;

2.      在函数startNavigating 中加入请求AGPS代码,即软件开始执行导航状态比如软件开始运行或开始从后台切换到前台【不代表定位】

  加入到最后一句都可以!

sendMessage(DOWNLOAD_XTRA_DATA, 0, null);

3.      在函数reportSvStatus 中最后地方加入:sendMessage(DOWNLOAD_XTRA_DATA, 0, null)

如下面代码:

   if (mNavigating && mStatus == LocationProvider.AVAILABLE && mLastFixTime > 0 &&
            System.currentTimeMillis() - mLastFixTime > RECENT_FIX_TIMEOUT) {
            // send an intent to notify that the GPS is no longer receiving fixes.
            Intent intent = new Intent(LocationManager.GPS_FIX_CHANGE_ACTION);
            intent.putExtra(LocationManager.EXTRA_GPS_ENABLED, false);
            mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
            updateStatus(LocationProvider.TEMPORARILY_UNAVAILABLE, mSvCount);
        }

修改为:

        if (mNavigating && mStatus == LocationProvider.AVAILABLE && mLastFixTime > 0 &&
            System.currentTimeMillis() - mLastFixTime > RECENT_FIX_TIMEOUT) {
            // send an intent to notify that the GPS is no longer receiving fixes.
            Intent intent = new Intent(LocationManager.GPS_FIX_CHANGE_ACTION);
            intent.putExtra(LocationManager.EXTRA_GPS_ENABLED, false);
            mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
            updateStatus(LocationProvider.TEMPORARILY_UNAVAILABLE, mSvCount);


 sendMessage(DOWNLOAD_XTRA_DATA, 0, null)
        }
else
{
 if (mNavigating && mStatus == LocationProvider.TEMPORARILY_UNAVAILABLE)
               {
            long tmpEsp = System.currentTimeMillis() - mLastFixTime;// > RECENT_FIX_TIMEOUT
            if( (tmpEsp/1000)%(2*60*60) == 0)
            {
            sendMessage(DOWNLOAD_XTRA_DATA, 0, null)
            }
}
}

注:这段代码意思是说,可以正常导航,但是超时10s还没有定位,仅辅助,客户可以根据超时时间长短进行修改10s

         在不定位期间,也只请求一次哦【想请求多次,需要继续修改代码,暂定够用】

 

     从分析源代码进行的逻辑修改,需要重新编辑Framework代码;此代码属于Android OS代码一部分;

 

总结:

 以上代码可以解决客户的一些问题:

1. APP或地图切换到后台的,然后切换前台,定位慢问题

2. 客户在地下停车室,很长时间,然后开出去,定位慢问题

3. 客户从开阔地带走进大厦,长时间才走出去,定位慢问题

4. 解决方案3可以多次请求,直到定位为止


BR

Colin

你可能感兴趣的:(Android,OS)