[ 
https://issues.apache.org/jira/browse/CB-2273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13563113#comment-13563113
 ] 

Joe Bowser commented on CB-2273:
--------------------------------

How do you know you're using our plugin and not the built-in Geolocation in the 
Cordova WebView?
                
> There is a bug in the android geolocation plugin of Cordova 2.3
> ---------------------------------------------------------------
>
>                 Key: CB-2273
>                 URL: https://issues.apache.org/jira/browse/CB-2273
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android
>    Affects Versions: 2.2.0, 2.3.0
>         Environment: HTC t328D,Android 4.0.3
>            Reporter: SunshineTech Zhang
>            Assignee: Joe Bowser
>              Labels: patch
>
> When I call the watchPosition function, it only call back my successCallback 
> function 2 times and errorCallback function once. That is, it call back 
> successCallback function of getCurrentPosition and watchPosition; and 
> errorCallback function of watchPosition when timeout event was fired. Then 
> the plugin gives nothing any more.
> Then I read the source code of org.apache.cordova.GeoBroker and 
> org.apache.cordova.CordovaLocationListener. I found there was an issue in the 
> win and fail method of org.apache.cordova.CordovaLocationListener. That is, 
> after the listener called its callbacks' by traversal, it then stop itself, 
> so it doesn't listen position changed information for its watches list.
> So I modify them, the plugin runs well.
> 1. I modify the win and fail method in the 
> org.apache.cordova.CordovaLocationListener as the following:
> protected void fail(int code, String message) {
>         for (CallbackContext callbackContext: this.callbacks)
>         {
>             this.owner.fail(code, message, callbackContext, false);
>         }
>         if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
>         {
>               Log.d(TAG, "Stopping global listener");
>               this.stop();
>         }
>         this.callbacks.clear();
>         Iterator<CallbackContext> it = this.watches.values().iterator();
>         while (it.hasNext()) {
>             this.owner.fail(code, message, it.next(), true);
>         }
>     }
>     private void win(Location loc) {
>         for (CallbackContext callbackContext: this.callbacks)
>         {
>             this.owner.win(loc, callbackContext, false);
>         }
>         if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
>         {
>               Log.d(TAG, "Stopping global listener");
>               this.stop();
>         }
>         this.callbacks.clear();
>         Iterator<CallbackContext> it = this.watches.values().iterator();
>         while (it.hasNext()) {
>             this.owner.win(loc, it.next(), true);
>         }
>     }
> 2、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);
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to