如何在下午6:30运行后台任务

时间:2018-04-24 05:03:18

标签: android xamarin.forms notifications broadcastreceiver localnotification

https://xamarinhelp.com/xamarin-background-tasks/#comment-1296 ..我正在使用这个后台工作者。我想在我的应用程序状态运行或不运行的每一天重复显示本地通知。它对我不起作用..请帮忙。 SendNotification()从主活动调用。重复的本地通知在我的应用程序状态运行的地方运行良好。但是在我的应用程序状态未运行的情况下,它无效。

JSONObject merged = new JSONObject(Obj1, JSONObject.getNames(Obj1));
for(String key : JSONObject.getNames(Obj2))
{
  merged.put(key, Obj2.get(key));
}

我正在尝试Android - Running a background task every 15 minutes, even when application is not running解决方案。但输出相同。

1 个答案:

答案 0 :(得分:0)

在Android上,如果版本< = 19,则可以使用AlarmManager,如果版本> 20,则使用JobScheduler。以下是github上的演示。

像这样:

   public void startTask()
        {
            if (Build.VERSION.SdkInt <= BuildVersionCodes.Kitkat)
            {

                AlarmManager alarmManager = (AlarmManager)GetSystemService(Context.AlarmService);
                Intent intent = new Intent(this, typeof(RepeatingAlarm));
                PendingIntent sender = PendingIntent.GetBroadcast(this, 0, intent, 0);
                // Schedule the alarm!
                alarmManager.SetRepeating(AlarmType.RtcWakeup, SystemClock.ElapsedRealtime(), 5 * 1000, sender);

            }
            else
            {
                JobScheduler scheduler = (JobScheduler)GetSystemService(Context.JobSchedulerService);

                if (isJobPollServiceOn())
                {

                }
                else
                {
                    JobInfo jobInfo = new JobInfo.Builder(1,
                        new ComponentName(this, Java.Lang.Class.FromType(typeof(JobSchedulerService))))
                            .SetPeriodic(1000*5)
                            .Build();
                    scheduler.Schedule(jobInfo);
                }
            }

        }

isJobPollServiceOn方法:

   [TargetApi(Value = 20)]
    public bool isJobPollServiceOn()
    {
        JobScheduler scheduler = (JobScheduler)GetSystemService(Context.JobSchedulerService);

        bool hasBeenScheduled = false;
        var jobInfos = scheduler.AllPendingJobs;

        for (int i = 0; i < jobInfos.Count; i++)
        {
            if (jobInfos[i].Id == 1)
            {
                hasBeenScheduled = true;
                break;
            }

        }


        return hasBeenScheduled;
    }