Android - запрос залпа выдает ECONNREFUSED, когда приложение закрыто - PullRequest
0 голосов
/ 25 августа 2018

У меня есть диспетчер аварий, который запускает intentservice, который каждую минуту извлекает данные с сервера, а затем отправляет уведомление.Проблема в том, что когда приложение открыто, я все еще могу получить данные, но если приложение закрыто, оно отправляет его, выбрасывает ECONNREFUSED.

ОШИБКА ГОЛОСА:

java.util.concurrent.ExecutionException:com.android.volley.NoConnectionError:
java.net.ConnectException: failed to connect to samples.openweathermap.org/138.201.197.100 (port 443) AFTER 2500ms: isConnected failed: ECONNREFUSED (Connection refused)

Тестирование в Android 5.1.1

Основная активность:

 private void scheduleAlarm() {
    Intent toastIntent= new Intent(getApplicationContext(),MyBroadcastReceiver.class);
    PendingIntent toastAlarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, toastIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    long startTime=System.currentTimeMillis(); //alarm starts immediately
    AlarmManager backupAlarmMgr=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    backupAlarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,startTime,1000*30,toastAlarmIntent); // alarm will repeat after every 15 minutes
}

Приемник вещания:

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
   MyJobIntentService.enqueueWork(context,intent);
}}

MyJobIntentService:

public class MyJobIntentService extends JobIntentService {
private String status="";

public static void enqueueWork(Context context, Intent work) {
    enqueueWork(context, MyJobIntentService.class, 1000, work);
}

@Override
protected void onHandleWork(@NonNull Intent intent) {
    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
    String url = "http://forsitefloodapp.xyz/Func/Func_GetFloodReportsBarangay";
    RequestFuture<JSONArray> future = RequestFuture.newFuture();
    JsonArrayRequest request = new JsonArrayRequest(url,future,future);
    requestQueue.add(request);

    try {
        JSONArray response = future.get(10, java.util.concurrent.TimeUnit.SECONDS);
        int size = response.length();

        if(size==0){
            status="NO REPORTS";
        }
        else {
            status="REPORTS DETECTED";
        }

    } catch (InterruptedException e) { status="Interuppted";

    } catch (ExecutionException e) { status=e.toString();

    } catch (TimeoutException e) { status="Timeout";

    }
    Log.i("MyJobIntentService", "Completed service @ " + status);

    //Sends notification
}}

1 Ответ

0 голосов
/ 25 августа 2018

intentservice не будет работать в качестве фоновой службы (приложение закрыто) от api 21 и выше .. если вы просто нацелились на api 21, используйте JobScheduler API ..., если вы нацелены на Api 14 и далее (Oreo или pre-Oreo) используйте JobIntentService в качестве его Modernway. Ваш менеджер аварийных сигналов должен вызвать broadcastreceiver, который запускает службу, когда время истекло.служба извлечет данные и отправит уведомление об этом.

...