Javascript Android上的PhoneGap地理定位
我使用PhoneGap开发了一个应用程序。目前,我只在Android上测试它。我的应用程序中有几个页面需要地理定位功能 所以我制作了一个JS来处理这行代码(当然这不是我唯一的代码行): navigator.geolocation.watchPosition(successGeolocation,errorGeolocation,{maximumAge:5000,enableHighAccurance:true}) 地理定位需要尽可能的精确,所以我使用GPS,并且需要一些时间来进行GPS定位 问题是当用户从一个页面导航到另一个页面时。WatchPosition停止(这是正常的,因为用户加载了另一个页面),当我回忆起它时,GPS需要再次修复 这是非常烦人的,我寻找一个解决方案,以保持全球定位系统的活动。有人对我有想法吗?也许有了一个插件或一个本地安卓LoC,我可以在整个应用程序生命周期中保持它的活动状态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定位 问题
谢谢。第一步,您应该创建一个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代码都放在一个文件中!谢谢,我将很快尝试您的解决方案:)