2012-11-29 34 views
2

我有3部GSM手机和3部verizon(CDMA)手机。我有一个BB应用程序,其中位置监听器被设置为5分钟的时间间隔。LocationUpdate方法在黑莓手机上被频繁拨打

对于2个verizon手机,应用程序的位置更新方法会被频繁调用。对于其余的情况,位置侦听器每隔5分钟定时调用一次。

什么可能导致这种行为差异?如果locationInterval == 0或在默认速率(每秒一次),否则

public synchronized void locationUpdated(LocationProvider locationProvider, Location location) { 
     if (enabled) { 

      if (blackberryProvider != null) { 
       try {      
        constructCriteria(GPSInfo.GPS_MODE_CELLSITE); 
        gpsUpdate(); 
       } catch (LocationException e) { 
        log stuff// 
       } 
      } 
     } 
    } 


    private void gpsUpdate() throws LocationException, InterruptedException { 
     try { 
      String gpsMode = null; 
     if (bbCriteria.getMode() == GPSInfo.GPS_MODE_CELLSITE) { 
       gpsMode = "cellsiteMode"; 
      } 


      if (gpsMode == "cellsiteMode" && gpsMode.length() > 0 && bbProvider != null) { 
       // variable declaration 

       try { 
        bbLocation = (BlackBerryLocation) bbProvider.getLocation(10); 
       } catch (LocationException e) { 

        bbLocation = null; 
       } 

       if (bbLocation != null) { 
        // do stuff 
        // store location in the database 


         } 

        } 

       } 

      } 
     } 
    } 





private void constructCriteria(final int mode) { 
    blackberryCriteria = null; 
    blackberryProvider = null; 
    blackberryCriteria = new BlackBerryCriteria(); 
    blackberryCriteria.setSatelliteInfoRequired(true, false); 



    if (mode == GPSInfo.GPS_MODE_CELLSITE) { 
     setCriteraForCellSite(); 
    } 
    try { 
     blackberryProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(blackberryCriteria); 

     if (iLocationListner == null) { 
      iLocationListner = new ILocationListner(); 
      blackberryProvider.setLocationListener(iLocationListner, locationInterval == 0 ? 300 : locationInterval, -1, -1); 
     } else { 
      blackberryProvider.setLocationListener(iLocationListner, locationInterval == 0 ? 300 : locationInterval, -1, -1); 
     } 
    } catch (LocationException lex) { 
     Logger.log("LocationEventSource constructor", lex); 
     return; 
    } 

} 
+0

你可以发布一些代码,显示你如何设置你的监听器?你使用哪些API和操作系统版本?你如何设置你的位置标准? – Nate

+0

我添加了代码。让我知道是否需要添加任何其他信息。 – RedDopamine

回答

2

你设置你的标准来更新每300秒。这真的是你想要的吗? locationInterval初始化在哪里?程序运行时其值如何变化?

+0

locationinterval是从另一个我没有包含的方法初始化的。我在所有设备上安装了相同的应用程序。除了2个设备外,其余的都以locationInterval指定的间隔值获取更新。 – RedDopamine

+0

如果没有看到所有相关的代码,很难进一步评论。您正在报告的行为由constructCriteria()被调用时locationInterval的不同值来解释。您是否尝试过记录该值以查看调用setLocationListener()时的实际内容? – Richard

+0

locationInterval的值设置为250秒。当我登录时,就是打印出来的。 – RedDopamine