当我的应用在后台或被刷卡杀死时,我的应用未在Redmi手机中收到推送通知。
因此,我试图通过WorkManager唤醒电话,该系统可在Redmi和其他中文自定义ROM电话以外的许多电话上使用。
这是我的Worker类代码
public class OpenTalkWorkManager extends Worker {
@NonNull
@Override
public Result doWork() {
Log.i("wake_up", "Waking up now: " + System.currentTimeMillis());
FirebaseUtils.getInstance().updateUserPresenceStatus(getApplicationContext(), "yes");
Intent intent = new Intent("com.opentalk.WAKE_UP");
getApplicationContext().sendBroadcast(intent);
return Result.SUCCESS;
}
我正在尝试通过PeriodicWorkRequest使工作入队
PeriodicWorkRequest.Builder mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(OpenTalkWorkManager.class, 4, TimeUnit.MINUTES);
Constraints myConstraints = new Constraints.Builder()
.setRequiresBatteryNotLow(false)
.setRequiredNetworkType(NetworkType.NOT_REQUIRED)
.setRequiresCharging(false)
.setRequiresDeviceIdle(false)
.setRequiresStorageNotLow(false)
// Many other constraints are available, see the
// Constraints.Builder reference
.build();
PeriodicWorkRequest myWork = mPeriodicWorkRequest.setConstraints(myConstraints).build();
UUID compressionWorkId = myWork.getId();
WorkManager.getInstance().cancelWorkById(compressionWorkId);
WorkManager.getInstance().enqueue(myWork);
WorkManager
的哪个版本?我们修复了一些有关PeriodicWork
和强制停止alpha05
中应用程序的错误。 alpha06
消失了,建议您尝试使用它。如果您仍然遇到相同的问题,请使用问题跟踪器上的可再现测试用例,向问题跟踪器报告。
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
在清单文件中添加这些权限可能会起作用。
@@ Sujeet @PavelPoley @VrajeshHirani以及所有使用WorkManager API的用户,即使该应用程序处于后台或已终止状态,它也可以在Android Stock OS设备或模拟器中正常运行。仅在像小米,Vivo等自定义ROM时出现问题,它们在默认情况下将“省电模式”设置为“最佳”,这使得WorkManager API无法正常工作。请将其设置为无限制,您会看到WorkManager将运行该任务。
注意:我正在使用1.0.1版,并且在对节电模式进行了上述更改之后,它与小米设备的搭配效果很好。