首页 > 解决方案 > 如何在后台发生转换(ENTER&EXIT)cordova geofence插件时在后台调用PHP文件?

问题描述

我只想在后台发生转换(ENTER & EXIT)时调用位于服务器中的 php 文件。我阅读了科尔多瓦地理围栏插件文档,因为我需要创建 TransitionReceiver.java 文件来实现这一点。

我读了这个本 机实现

任何帮助

我尝试了以下代码:

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

     }
   }
   }

谢谢

标签: javacordovacordova-pluginsandroid-geofence

解决方案


如果您想更新插件的本机代码,您应该复制 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),并且您想从非抽象类中覆盖它。

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


推荐阅读