Как сделать вызов PHP-файла в фоновом режиме, когда происходит переход (ENTER & EXIT), плагин Cordova Geofence в фоновом режиме? - PullRequest
0 голосов
/ 07 марта 2019

Я хочу сделать вызов php-файла, который находится на сервере, когда происходит переход (ENTER & EXIT) только на background .Я прочитал документацию к плагину cordova geofence, для чего мне нужно создать файл 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) {

     }
   }
   }

Спасибо

1 Ответ

1 голос
/ 07 марта 2019

Если вы хотите обновить собственный код плагина, вы должны продублировать репозиторий git и использовать свой собственный клонированный репозиторий в своем config.xml

Как это:

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

Затем вы должны реализовать вызов ajax в функции onReceive.

Вы можете найти пример здесь: Вызов функции PHP из Android?

После редактирования кода:

Я думаю, что проблема была:

com.cowbell.cordova.geofence.TransitionReceiver $ PostLocationTask $ is не абстрактный и не переопределяет абстрактный метод

Вы можете видеть, что метод doInBackground был абстрактным ( Doc здесь ), и вы хотите переопределить его из неабстрактного класса.

Мне не очень удобно с нативной разработкой, но я думаю, что ваш класс PostLocationTask должен быть абстрактным для переопределения абстрактного метода

...