【问题标题】:Cannot access Internet in Job Service When App is closed应用程序关闭时无法在 Job Service 中访问 Internet
【发布时间】:2020-04-03 09:01:46
【问题描述】:

所以我写了这个Job Service Class,它的目的是在后台访问Internet,下载一些东西,并以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 类中的异步类之外,一切都正常工作,即DownloadNotification 中的 doInBackground 无法上网下载数据。
自定义函数 Connectivity.query(String,String...) 在无法获取数据时返回 null(按设计)。我猜这个类没有问题,因为一切正常。 不知道该怎么办。

【问题讨论】:

  • 当您使用JobScheduler 安排作业时,表明您需要网络连接。除此之外,请确保 Connectivity.query() 正在将异常记录到 Logcat,然后查看显示的内容。
  • @CommonsWare 我确实在 Job Scheduler 中添加了网络类型: ComponentName componentName = new ComponentName(context,NotificationService.class); JobInfo info = new JobInfo.Builder(1,componentName) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setPersisted(true) .setPeriodic(Data.min*Data.sec*1000) .build();

标签: android android-asynctask background jobservice


【解决方案1】:

抱歉,这是集成在我的 REST API 中的 JWT 令牌验证代码的问题,而不是上述代码的问题。通过创建另一个 API 找到了解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2021-01-31
    • 2018-11-24
    • 2012-12-13
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多