Итак, я написал этот класс 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 ...) возвращает ноль (как и было задумано), когда не удается получить данные. Нет Проблема в этом классе я думаю, так как все работало нормально. Не уверен, что делать.