当后台发生Transition(ENTER&EXIT)cordova geofence插件时,如何在后台调用PHP文件?

时间:2019-03-07 13:25:04

标签: java cordova cordova-plugins android-geofence

我只想在后台发生过渡时(进入和退出)调用服务器中的php文件。我读  我需要创建cordova geofence插件文档来实现此目的。

我读了这个native implementation

任何帮助

我尝试了以下代码:

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) {

     }
   }
   }

谢谢

1 个答案:

答案 0 :(得分:1)

如果要更新插件的本机代码,则应复制git存储库,并在config.xml上使用自己的克隆存储库

喜欢这个:

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

然后,您必须在onReceive函数中实现“ ajax”调用。

您可以在此处找到示例:Call PHP function from android?

代码编辑后:

我认为问题是:

  

com.cowbell.cordova.geofence.TransitionReceiver $ PostLocationTask $是   不是抽象的,并且不会覆盖抽象方法

您可以看到doInBackground方法是抽象的(Doc here),并且您想要 从非抽象类覆盖它。

我对本机开发不太满意,但我认为您的类PostLocationTask必须是抽象的,才能覆盖抽象方法