我只想在后台发生过渡时(进入和退出)调用服务器中的php文件。我读 我需要创建cordova geofence插件文档来实现此目的。
任何帮助
我尝试了以下代码:
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) {
}
}
}
谢谢
答案 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
必须是抽象的,才能覆盖抽象方法