[英]PeriodicWorkRequest Failed redmi,vivo,oppo
在設置 PeriodicWorkRequest 時,通知不會每隔 15 分鍾發送一次。 通知在 15 分鍾的某個時間、16 分鍾的某個時間、20 分鍾的某個時間、30 分鍾的某個時間或某個時間不顯示通知。 我想在選定的時間段(例如上午 8 點到晚上 8 點)收到通知時每 15 次播放一次聲音。 我實施了 PeriodicWorkRequest 但仍然有些設備沒有按時發出通知..
========== SchedulerActivity=====================
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==========================
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();
}
}
}
請提出一些解決方案....
由於這些制造商強加的電池優化,它不起作用。
每次用戶離開您的應用程序或應用程序進入后台時,手機都會終止與您的應用程序相關的所有服務。
繼續尋找它是沒有意義的,這是一個已知問題,希望谷歌能夠向他們施加壓力以恢復體面的用戶體驗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.