2013-04-05 59 views
2

我使用PhoneGap的應用程序工作。目前,我只在Android上測試它。我的應用程序中有幾個頁面需要地理位置功能。Android上的PhoneGap的地理位置

所以我做了一個JS用這行代碼(當然這不是我的唯一的代碼行)來處理它: navigator.geolocation.watchPosition(successGeolocation,errorGeolocation,{maximumAge:5000,enableHighAccuracy:真}) ;

地理位置需要儘可能最準確,所以我使用GPS,可能需要一些時間才能獲得GPS定位。

問題是,當用戶從一個頁面導航到另一個。 WatchPosition停止(這是正常的,因爲用戶加載了其他頁面),當我回想起它時,GPS需要再次修復。

這是非常煩人的,我搜索解決方案,以保持GPS活動。有人有我的想法?也許使用插件或原生Android LoC,我可以在應用程序的所有生命中保持活動狀態?

謝謝。

+0

我找到了一個可能的修復,但它很醜陋,我不希望這樣做......我可以做一個單一頁面embeed我的JS,然後在每個屏幕創建一個DIV它。然後,我隱藏除想查看的所有DIV,但通過此解決方案,我的所有HTML代碼都放在一個文件中! – Gaetan 2013-04-05 15:09:30

回答

2

第一步你應該創建一個Android插件,它會爲你提供接收位置數據的API。

創建一個插件很容易,這裏解釋: Plugin Development GuideDeveloping a Plugin on Android。 您還可以看到創建Cordova插件here的示例。

接下來,創建一個位置監視器類。你可以讓它成爲單身人士,並從你的主要活動中初始化它。

下面是一個簡單的,但工作代碼,我編譯了幾個來源和許多測試,以滿足我的需求。 主要代碼取自here,儘管我儘可能簡化了它。

public class LocationMonitor 
{ 
    private LocationListener locationListener = null; 
    private LocationManager locationManager = null; 
    private Location location = null; 


    public LocationMonitor() 
    { 
    } 

    public void startGPSActivity(Context context) 
    { 
     LocationLooper looper = new LocationLooper(); 
     looper.start(); 

     while (!looper.isReady()) 
     { 
     } 

     looper.handler.post(new LocationBootstrapper(context)); 
    } 

    public void stopGPSActivity() 
    { 
     locationManager.removeUpdates(locationListener); 
    } 

    public Location getLocation() 
    { 
     return location; 
    } 

    private class LocationLooper extends Thread 
    { 
     private Handler handler; 

     private LocationLooper() 
     { 
     } 

     public void run() 
     { 
      Looper.prepare(); 

      this.handler = new Handler(); 

      Looper.loop(); 
     } 

     public boolean isReady() 
     { 
      return this.handler != null; 
     } 
    } 


    private class LocationBootstrapper implements Runnable 
    {  
     private Context context; 

     private LocationBootstrapper(Context context) 
     { 
      this.context = context; 
     } 

     public void run() 
     { 
      locationListener = new LocationListenerImpl(); 
      locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, locationListener); 
     } 
    } 


    private class LocationListenerImpl implements LocationListener 
    { 
     private LocationListenerImpl() 
     { 
     } 

     @Override 
     public void onLocationChanged(Location location) 
     { 
      LocationMonitor.this.location = location; 
      Log.i("LocationMonitor", "New location: lat= " + location.getLatitude() + " lng=" + location.getLongitude() + " acc=" + location.getAccuracy()); 
     } 

     @Override 
     public void onProviderDisabled(String provider) 
     {  
     } 

     @Override 
     public void onProviderEnabled(String provider) 
     {  
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) 
     {  
     } 
    } 
} 

現在從你的插件訪問LocationMonitor類,你有你需要的解決方案 - 網頁更改將不會重新初始化您的GPS和位置數據是提供給您的PhoneGap應用程序。

乾杯

+0

謝謝,我會很快嘗試你的解決方案:) – Gaetan 2013-04-08 08:48:33