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);
        }
    }

Reply via email to