When I call the watchPosition function, it only call back
my successCallback function 2 times and errorCallback function once. That
is, It only fires timeout event once. Then the plugin doesn't give to me
the position. I read the plugin source, I think there are some problems.
Then I modify them, the plugin runs well.
1、I modify the win and fail method in the org.apache.cordova.GeoBroker as
the following:
public void win(Location loc, CallbackContext callbackContext, boolean
keepCallback) {
PluginResult result = new PluginResult(PluginResult.Status.OK,
this.returnLocationJSON(loc));
result.setKeepCallback(keepCallback);
callbackContext.sendPluginResult(result);
}
public void fail(int code, String msg, CallbackContext callbackContext,
boolean keepCallback) {
JSONObject obj = new JSONObject();
String backup = null;
try {
obj.put("code", code);
obj.put("message", msg);
} catch (JSONException e) {
obj = null;
backup = "{'code':" + code + ",'message':'" +
msg.replaceAll("'", "\'") + "'}";
}
PluginResult result;
if (obj != null) {
result = new PluginResult(PluginResult.Status.ERROR, obj);
} else {
result = new PluginResult(PluginResult.Status.ERROR, backup);
}
result.setKeepCallback(keepCallback);
callbackContext.sendPluginResult(result);
}
2、I modify the win and fail method in
the org.apache.cordova.CordovaLocationListener as the following:
private void win(Location loc) {
for (CallbackContext callbackContext: this.callbacks)
{
this.owner.win(loc, callbackContext, false);
}
this.callbacks.clear();
if(this.owner.isGlobalListener(this) && this.size() == 0)
{
Log.d(TAG, "Stopping global listener");
this.stop();
}
Iterator<CallbackContext> it = this.watches.values().iterator();
while (it.hasNext()) {
this.owner.win(loc, it.next(), true);
}
}
protected void fail(int code, String message) {
for (CallbackContext callbackContext: this.callbacks)
{
this.owner.fail(code, message, callbackContext, false);
}
this.callbacks.clear();
if(this.owner.isGlobalListener(this) && this.size() == 0)
{
Log.d(TAG, "Stopping global listener");
this.stop();
}
Iterator<CallbackContext> it = this.watches.values().iterator();
while (it.hasNext()) {
this.owner.fail(code, message, it.next(), true);
}
}