1

I want to make call to the php file which is located in server when transition happen (ENTER & EXIT ) in background only. I read the cordova geofence plugin documentation for that I need to create TransitionReceiver.java file to achieve this.

I read this native implementation

Any help

I tried below code:

package com.cowbell.cordova.geofence;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.os.AsyncTask;
import com.loopj.android.http.*;
import java.util.*;


public class TransitionReceiver extends BroadcastReceiver {

 @Override
  public void onReceive(Context context, Intent intent) {
    Logger.setLogger(new Logger(GeofencePlugin.TAG, context, false));
    Logger logger = Logger.getLogger();

    String error = intent.getStringExtra("error");

    if (error != null) {
        //handle error
        logger.log(Log.DEBUG, error);
    } else {
        String geofencesJson = intent.getStringExtra("transitionData");                
        PostLocationTask task = new TransitionReceiver.PostLocationTask();           
        task.execute(geofencesJson);                       
    }       
}

private class PostLocationTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... geofencesJson) {
        try {
            AsyncHttpClient client = new AsyncHttpClient();
            RequestParams data=new RequestParams();
            params.put("key1","value1");
            String url="someurl/xyz.php";
            client.post(url,data, new AsyncHttpResponseHandler() {

                public void onStart() {
                    super.onStart();                                                
                }

                public void onSuccess(String response) {
                }

                public void onFailure(Throwable e, String response) {
                }
            });


        } catch (Throwable e) {
            Log.println(Log.ERROR, GeofencePlugin.TAG, "Exception posting 
    geofence: " + e);    
        }

        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {

     }
   }
   }

Thanks

k_kumar
  • 201
  • 1
  • 14

1 Answers1

1

If you want updated the native code of plugin you should duplicate the git repository and use you'r own cloned repository on you'r config.xml

Like this :

<plugin name="name-of-plugin" spec="https://github.com/**yourrepositoryurl.git**" />

Then, you have to implement a "ajax" call into the onReceive function.

You can find a exemple here : Call PHP function from android?

After you'r code edit :

I thinks the problem was :

com.cowbell.cordova.geofence.TransitionReceiver$PostLocationTask$ is not abstract and does not override abstract method

You can see the doInBackground method was abstract (Doc here) and you want to override it from a non abstract class.

I'm not very comfortable with native development but i'm thinks you'r class PostLocationTask must be abstract for override abstract method

Enzo B.
  • 2,209
  • 1
  • 8
  • 29