Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 精确的作业调度不需要';当应用程序长时间(>;1分钟)在一个加5吨牛轧糖(牛轧糖)上停止时,t工作_Android_Alarmmanager_Android Jobscheduler_Android Job - Fatal编程技术网

Android 精确的作业调度不需要';当应用程序长时间(>;1分钟)在一个加5吨牛轧糖(牛轧糖)上停止时,t工作

Android 精确的作业调度不需要';当应用程序长时间(>;1分钟)在一个加5吨牛轧糖(牛轧糖)上停止时,t工作,android,alarmmanager,android-jobscheduler,android-job,Android,Alarmmanager,Android Jobscheduler,Android Job,我正试图在每天的确切时间显示一次通知。我正在使用Evernote Android作业库进行此操作。时间来自后端API。当应用程序处于前台或后台时,下面的代码工作正常。但当应用程序被长时间(约1分钟)关闭或重新启动后,我并没有收到1+5T(牛轧糖)和Oppo设备(Mashmallow)的通知。此外,有时当我重新启动应用程序时,我会一次收到所有失败的通知。在华硕Zenfone Max(Mashmallow)上一切正常。在华硕的每个场景中都会触发警报(前台、后台、屏幕锁定甚至重启) 下面是一加五的ad

我正试图在每天的确切时间显示一次通知。我正在使用Evernote Android作业库进行此操作。时间来自后端API。当应用程序处于前台或后台时,下面的代码工作正常。但当应用程序被长时间(约1分钟)关闭或重新启动后,我并没有收到1+5T(牛轧糖)和Oppo设备(Mashmallow)的通知。此外,有时当我重新启动应用程序时,我会一次收到所有失败的通知。在华硕Zenfone Max(Mashmallow)上一切正常。在华硕的每个场景中都会触发警报(前台、后台、屏幕锁定甚至重启)

下面是一加五的adb日志

//当应用程序被终止且在警报计划时间之前

Shikhars-MacBook-Pro:HOGAndroid_New shikhardeep$ adb shell dumpsys alarm | grep "com.tf.eros.faythTv"
    ELAPSED_WAKEUP #0: Alarm{3a8c0ae type 2 when 1118303576 com.tf.eros.faythTv}
      tag=*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
      operation=PendingIntent{e233e4f: PendingIntentRecord{217c9dc com.tf.eros.faythTv broadcastIntent}}
    ELAPSED_WAKEUP #0: Alarm{44439ba type 2 when 1118303589 com.tf.eros.faythTv}
      tag=*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
      operation=PendingIntent{a7f706b: PendingIntentRecord{a45a7c8 com.tf.eros.faythTv broadcastIntent}}
  u0a355:com.tf.eros.faythTv +1s718ms running, 4 wakeups:
      *walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
//当应用程序被终止并且刚好在警报计划时间之后

Shikhars-MacBook-Pro:HOGAndroid_New shikhardeep$ adb shell dumpsys alarm | grep "com.tf.eros.faythTv"
  u0a355:com.tf.eros.faythTv +1s722ms running, 6 wakeups:
      *walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
代码
你有什么解决办法吗?我也面临同样的问题。不。试着使用WorkManager。它是Android的一部分。这个问题主要发生在中国手机上,如One Plus、Oppo、Vivocan。我们将workmanager安排为特定的日期和时间,就像alarm manager?一样?。根据此链接,AlarmManager是最佳选择,但其他答案也提到WorkManager我尝试使用WorkManager,但在One Plus 6T中,当应用程序被终止时,它不起作用。(背景中)。你能帮我吗?
public class ShowHoroscopeNotificationJob extends Job {

public static final String TAG = "HOROSCOPE_NOTIFICATION";

public ShowHoroscopeNotificationJob() {
    super();
}

@Override
protected void onReschedule(int newJobId) {
    super.onReschedule(newJobId);
}

@NonNull
@Override
protected Result onRunJob(@NonNull Params params) {
    try {

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(getContext(), "HOG_NOTIFICATION")
                        .setSmallIcon(R.drawable.notification_icon)
                        .setLargeIcon(BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.ic_launcher))
                        .setColor(ContextCompat.getColor(getContext(), R.color.colorPrimary))
                        .setContentTitle("Horoscope Reminder")
                        .setContentText("Check out Daily Horoscope !!!")
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                        .setAutoCancel(true);

        NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE);

        if (notificationManager != null) {
            notificationManager.notify(new Random().nextInt(40) + 1, mBuilder.build()); 
            schedule(getExactTime(ZPreferences.getHoroscopeReminderTime(getContext()))); //again calling schedule() as setExact() can't be periodic 
            return Result.SUCCESS;
       }

    } catch (Exception e) {

        e.printStackTrace();
        return Result.RESCHEDULE;
    }
}

public static void schedule(long exactInMs) {

    if (exactInMs != 0L) {

        new JobRequest.Builder(ShowHoroscopeNotificationJob.TAG)
                .setExact(exactInMs)
                .build()
                .schedule();
    }

}