Невозможно получить доступ к Inte rnet в Job Service, когда приложение закрыто - PullRequest
0 голосов
/ 03 апреля 2020

Итак, я написал этот класс Job Service Class, который предназначен для доступа к Inte rnet в фоновом режиме, загрузки нескольких материалов и отображения уведомлений с интервалом в 15 секунд (увеличу его позже до 45 минут, не беспокойство):

import android.app.PendingIntent;
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import java.util.ArrayList;
import java.util.HashMap;

public class NotificationService extends JobService {

    DownloadNotification d;

    @Override
    public boolean onStartJob(JobParameters params) {
        d=new DownloadNotification();
        d.execute(params);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }

    private class DownloadNotification extends AsyncTask<JobParameters,Void,JobParameters>
    {
        ArrayList<HashMap<String,String>> resN;
        ArrayList<HashMap<String,String>> resP;

        SharedPreferences sp;

        @Override
        protected void onPreExecute() {
            sp=getSharedPreferences("eTutionPro",MODE_PRIVATE);
            super.onPreExecute();
        }

        @Override
        protected JobParameters doInBackground(JobParameters... params) {
            resN=Connectivity.query("SELECT * FROM `notices` WHERE noticeID>? ORDER BY noticeID DESC LIMIT 15",""+sp.getInt("LastNotificationID",-1));
            return params[0];
        }

        @Override
        protected void onPostExecute(JobParameters pam) {
            Log.d("Thread","From Thread NOTICE RESULT : "+(resN!=null?""+resN.size():"null"));

            SharedPreferences.Editor prefEditor = sp.edit();
            if(resN!=null) {
                boolean b=true;
                for (HashMap<String, String> i : resN) {

                    if(b)
                    {
                        b=false;
                        prefEditor.putInt("LastNotificationID", Integer.parseInt(i.get("noticeID")));
                        prefEditor.commit();
                    }

                    Intent intent = new Intent(getApplicationContext(), ViewNotice.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

                    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "101")
                            .setSmallIcon(R.drawable.logo)
                            .setContentTitle(i.get("noticeTitle"))
                            .setContentText(i.get("noticeBody"))
                            .setContentIntent(pendingIntent)
                            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

                    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
                    notificationManager.notify(Integer.parseInt(i.get("noticeID")), builder.build());
                }
            }
            jobFinished(pam,false);
        }
    }
}

Все работает нормально, когда приложение активно или в последние.
Но когда приложение удалено из последних, все работает как следует, за исключением того, что класс Asyn c в Класс NotificationService, т. Е. DoInBackground в DownloadNotification не может получить доступ к Inte rnet для загрузки данных.
Пользовательская функция Connectivity.query (String, String ...) возвращает ноль (как и было задумано), когда не удается получить данные. Нет Проблема в этом классе я думаю, так как все работало нормально. Не уверен, что делать.

1 Ответ

0 голосов
/ 05 апреля 2020

Извините, это была проблема с кодом проверки токена JWT, а не с вышеуказанным кодом, встроенным в мой REST API. Нашел обходной путь, создав другой API.

...