关闭应用程序后无法在作业服务中访问互联网
Cannot access Internet in Job Service When App is closed
所以我写了这个Job Service Class 是为了在后台访问互联网,下载一些东西,并以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);
}
}
}
当应用程序处于活动状态或最近使用时,一切正常。
但是当应用程序从最近的应用程序中删除时,除了 NotificationService Class 中的 Async Class,一切都正常工作,即DownloadNotification 中的 doInBackground 无法访问 Internet 下载数据。
自定义函数 Connectivity.query(String,String...) returns null(as designed) 当它无法获取时 data.No 这个 class 中的问题 我想因为一切正常.
不知道该怎么做。
抱歉,这是 JWT 令牌验证码的问题,而不是上面的代码,集成在我的 REST API 中。通过创建另一个 API.
找到解决方法
所以我写了这个Job Service Class 是为了在后台访问互联网,下载一些东西,并以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);
}
}
}
当应用程序处于活动状态或最近使用时,一切正常。
但是当应用程序从最近的应用程序中删除时,除了 NotificationService Class 中的 Async Class,一切都正常工作,即DownloadNotification 中的 doInBackground 无法访问 Internet 下载数据。
自定义函数 Connectivity.query(String,String...) returns null(as designed) 当它无法获取时 data.No 这个 class 中的问题 我想因为一切正常.
不知道该怎么做。
抱歉,这是 JWT 令牌验证码的问题,而不是上面的代码,集成在我的 REST API 中。通过创建另一个 API.
找到解决方法