首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PeriodicWorkRequest失败雷德米,体内,oppo

PeriodicWorkRequest失败雷德米,体内,oppo
EN

Stack Overflow用户
提问于 2021-12-16 08:18:23
回答 1查看 50关注 0票数 1

在设置PeriodicWorkRequest时,不要每隔15分钟发送一次通知。通知有时在15分钟,有时在16分钟,有时在20分钟,有时在30分钟,有时不显示通知。我想每15小时播放一次通知,比如早上8点到晚上8点。我已经实现了PeriodicWorkRequest,但仍有一些设备没有及时发出通知。

SchedulerActivity

代码语言:javascript
复制
    public class SchedulerActivity extends AppCompatActivity
    {
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scheduler);
        schedulePeriodicWork();
    }

    void schedulePeriodicWork()
    {
        Constraints constraints= new Constraints.Builder().setRequiresBatteryNotLow(false).build();
       
    PeriodicWorkRequest unused = this.periodicWorkRequest = (PeriodicWorkRequest) newPeriodicWorkRequest.Builde((Class<? extends ListenableWorker>) MyWorker.class, 15, TimeUnit.MINUTE).setConstraints(constraints).build();

        WorkManager.getInstance().enqueueUniquePeriodicWork("My Work", ExistingPeriodicWorkPolicy.REPLACE, this.periodicWorkRequest);

    }
}

WorkerClass

代码语言:javascript
复制
public class MyWorker extends Worker
{
   public static MediaPlayer mediaPlayer;
   Context con;

    public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams)
    {
        super(context, workerParams);
        this.con=context;

    }

    @RequiresApi(api = Build.VERSION_CODES.Q)
    @NonNull
    @Override
    public Result doWork()
    {
        int startHour=AlramUtility.getFromTimeHours(getApplicationContext()); // 8
        int startMinute=AlramUtility.getFromTimeMinute(getApplicationContext()); //00
        int endHour=AlramUtility.getToTimeHours(getApplicationContext());  //20
        int endMinute=AlramUtility.getToTimeMinute(getApplicationContext()); //00

        Calendar calendar= Calendar.getInstance();
        Calendar startCalendar= Calendar.getInstance();
        startCalendar.set(Calendar.HOUR_OF_DAY,startHour);
        startCalendar.set(Calendar.MINUTE,startMinute);

        Calendar endCalendar= Calendar.getInstance();
        endCalendar.set(Calendar.HOUR_OF_DAY,endHour);
        endCalendar.set(Calendar.MINUTE,endMinute);

        if (calendar.after(startCalendar) && calendar.before(endCalendar)  calendar.equals(startCalendar) && calendar.before(endCalendar) 
                calendar.after(startCalendar) && calendar.equals(endCalendar))
        {
           
            PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 1, new Intent(getApplicationContext(), MainActivity.class).
                            addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),
                    PendingIntent.FLAG_CANCEL_CURRENT);
            NewMessageNotification.notify(getApplicationContext(), "Hello", "Hello-", 1, contentIntent);
            playAudio();
        }
        return Result.success();
    }

    private void playAudio()
    {
        try
        {
            this.mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.notificationtone);
            if (!this.mediaPlayer.isPlaying())
            {
                this.mediaPlayer.start();
                this.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp)
                    {
                        MyWorker.this.mediaPlayer.reset();
                        MyWorker.this.mediaPlayer.release();
                        MyWorker.this.mediaPlayer = null;
                    }
                });
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-16 08:55:11

由于这些制造商强加的电池优化,它不起作用。

每当用户离开您的应用程序或应用程序进入后台时,电话就会关闭与您的应用程序相关的所有服务。

没有必要继续寻找它,这是一个已知的问题,希望谷歌能够对他们施加压力,以恢复一个体面的用户体验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70375824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档