Javascript Android上的PhoneGap地理定位

Javascript Android上的PhoneGap地理定位,javascript,android,cordova,geolocation,gps,Javascript,Android,Cordova,Geolocation,Gps,我使用PhoneGap开发了一个应用程序。目前,我只在Android上测试它。我的应用程序中有几个页面需要地理定位功能 所以我制作了一个JS来处理这行代码(当然这不是我唯一的代码行): navigator.geolocation.watchPosition(successGeolocation,errorGeolocation,{maximumAge:5000,enableHighAccurance:true}) 地理定位需要尽可能的精确,所以我使用GPS,并且需要一些时间来进行GPS定位 问题

我使用PhoneGap开发了一个应用程序。目前,我只在Android上测试它。我的应用程序中有几个页面需要地理定位功能

所以我制作了一个JS来处理这行代码(当然这不是我唯一的代码行): navigator.geolocation.watchPosition(successGeolocation,errorGeolocation,{maximumAge:5000,enableHighAccurance:true})

地理定位需要尽可能的精确,所以我使用GPS,并且需要一些时间来进行GPS定位

问题是当用户从一个页面导航到另一个页面时。WatchPosition停止(这是正常的,因为用户加载了另一个页面),当我回忆起它时,GPS需要再次修复

这是非常烦人的,我寻找一个解决方案,以保持全球定位系统的活动。有人对我有想法吗?也许有了一个插件或一个本地安卓LoC,我可以在整个应用程序生命周期中保持它的活动状态


谢谢。

第一步,您应该创建一个Android插件,该插件将为您提供接收位置数据的API

创建插件非常简单,如下所述: 和。 您还可以看到创建Cordova插件的示例

接下来,创建一个位置监视器类。您可以将其设置为单例,并从主活动中初始化它

这是一个简单但有效的代码,我从多个源代码和许多测试中编译,以满足我的需要。 虽然我尽可能地简化了它,但主要代码取自

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应用程序


干杯

我已经找到了一个可能的解决办法,但它非常难看,我不想那样做。。。我可以制作一个页面来盗用我的JS,然后为其中的每个屏幕创建一个DIV。然后我隐藏了所有的DIV,除了我想查看的DIV之外,但是使用这个解决方案,我将所有的HTML代码都放在一个文件中!谢谢,我将很快尝试您的解决方案:)