标签: android-workmanager

在设备设置中打开特定应用程序的电池优化活动

我正在使用 WorkManager 库来安排后台任务,并为了防止应用程序休眠,从应用程序中打开电池优化部分,以便用户手动禁用我的应用程序的优化。问题是,即使选择了“不优化”选项,应用程序仍然处于休眠状态并且工作尚未完成。此外,当通过设备设置中的应用程序信息页面打开电池设置时,它会显示“已优化”,即使它在上一个活动中已更改为“不优化”。

此外,通过代码打开的电池优化页面包含包括系统应用程序在内的所有应用程序的列表,而通过应用程序信息打开的电池优化页面仅包含已安装应用程序的列表。

有没有办法通过代码进入第二个电池优化页面。因为如果禁用优化,应用程序就可以正常工作。

Intent intent = new Intent();
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

android android-doze-and-standby android-doze android-workmanager

5
推荐指数
0
解决办法
1958
查看次数

Android 定期工作请求在应用程序启动和关闭时启动和停止

当我的应用程序启动时,我使用WorkManager创建了一个定期工作请求,以从服务器获取数据并且其工作正常。我的问题是,我想在我的应用程序关闭时取消工作请求。

当我的应用程序关闭时如何取消工作请求或如何检测应用程序正在关闭?

我将不胜感激任何建议。

android background-service android-asynctask android-background android-workmanager

5
推荐指数
1
解决办法
4002
查看次数

Android Studio:用于将数据上传到 firebase 的工作类

我正在寻找一种将数据上传到 Firebase 的解决方案,而无需用户等待数据上传,以便用户可以在离线模式下使用该应用程序。

我们假设该应用程序是关于地点的。在此应用程序中,用户可以上传图像和包含地址、城市、州、国家、纬度、经度、描述等的对象。假设是一个大 POJO。

Firebase 实时数据库和 Firebase Firestore 可以等待(我不知道多久)稳定的互联网连接来发送数据。但Firebase Storage没有这个功能。

所以我找到了WorkManager。它似乎解决了问题,但我必须将 POJO 序列化为小的原始变量类型才能将 POJO 发送到Worker类。

我想要达到的结果是:

1)将图像上传到Firebase存储

2) 图片的下载地址

3) 将 POJO 发送到 Firebase Firestore,其中包含 ImageUrl。

问题

1)WorkManager最适合这种目的吗?

2) 在离线模式下,用户可以触发此后台作业多少次而不会对应用程序造成任何问题?

3)如何正确地将POJO发送到班级Worker

这是我到目前为止所做的:

获取新地点的 PushKey,启动后台作业并继续浏览活动:

    savePlaceData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            DocumentReference docRef = DatabaseRouter.getPlaceCollectionRef().document();
            String key = docRef.getId();
            uploadPlaceDataInBackground(key)
            Intent intent = new Intent(PlaceActivity.this, OtherActivity.class);
            startActivity(intent);

        }
    });
Run Code Online (Sandbox Code Playgroud)

设置后台作业的请求:

    private void uploadPlaceDataInBackground(String placeKey) {
        // TESTING …
Run Code Online (Sandbox Code Playgroud)

android firebase-storage google-cloud-firestore android-workmanager

5
推荐指数
0
解决办法
1547
查看次数

如何观察 Android WorkManager Workers

我当前的 Android 应用程序采用

archWorkerRuntimeVersion = '2.3.0-beta02'

api "androidx.work:work-runtime:$archWorkerRuntimeVersion"
api "androidx.work:work-runtime-ktx:$archWorkerRuntimeVersion"
Run Code Online (Sandbox Code Playgroud)

处理后台工作。

当工作人员运行时,我会显示一个工具栏进度旋转器,向用户发出该应用程序“忙”的信号。

我的应用程序由多个活动组成,我使用 Android JetPack ViewModels 来管理 Worker。

我开始工作如下:-

val myWorkRequest: OneTimeWorkRequest =
    OneTimeWorkRequest.Builder(MyWorker::class.java)
        .addTag(WORK_IN_PROGRESS_TAG + "${UUID.randomUUID()}").build()

    WorkManager.getInstance(applicationContext)
        .beginUniqueWork(
            UNIQUE_WORK_NAME,
            ExistingWorkPolicy.KEEP,
            myWorkRequest
        )
        .enqueue()
Run Code Online (Sandbox Code Playgroud)

我有一个观察者定义如下:-

private val observer = Observer<WorkInfo> { workInfo ->

    when(workInfo.state) {
        WorkInfo.State.RUNNING -> Log.e("OBSERVING", "${UUID.randomUUID()} :: show Progress Spinner")
        WorkInfo.State.ENQUEUED -> Log.e("OBSERVING", "${UUID.randomUUID()} :: show Progress Spinner")
        WorkInfo.State.SUCCEEDED -> Log.e("OBSERVING", "${UUID.randomUUID()} :: stop showing Progress Spinner")
        WorkInfo.State.FAILED -> Log.e("OBSERVING", "${UUID.randomUUID()} :: stop showing Progress Spinner")
        WorkInfo.State.BLOCKED …
Run Code Online (Sandbox Code Playgroud)

android android-workmanager

5
推荐指数
1
解决办法
9309
查看次数

工作经理适合放背景音乐吗?

我正在尝试在后台播放音乐,之前我使用服务来实现此目标,但现在我想知道,我可以使用工作管理器而不是服务来播放音乐吗?谁能给我一个指南吗?

android background-service android-workmanager

5
推荐指数
1
解决办法
1627
查看次数

WorkManager 或 AlarmManager 用于日常请求然后通知工作?

这是用例:用户设置具有特定时间的每日通知。在指定时间,发出网络请求以获取一些数据,然后使用检索到的数据显示通知。我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例。

据我了解,AlarmManager 最适合在精确的时间进行调度。但如果没有网络,作业就会失败,我更喜欢推迟作业以尊重网络限制,而不是执行失败。对于这种类型的受限工作,在保证最终执行的情况下,WorkManager 看起来是最好的解决方案,使用具有初始延迟的 OneTimeWorkRequest 以便在正确的时间执行。

android alarmmanager android-workmanager

5
推荐指数
1
解决办法
1742
查看次数

Android 从 WorkManager 队列中删除工作线程或将状态从 FAILED 更改为 CANCELED

使用的组件:WorkManager

使用版本:2.3.4

设备/Android 版本转载于:任何

你好 - 我想从workmanager队列中删除一个工作线程,即使它已经完成或正在运行。我知道当 Worker 处于 RUNNING 状态时我可以取消它,问题是当它完成并失败时我想删除它。Workmanager.pruneWork()删除 WorkManager 中的所有工作人员,但我希望只删除特定的工作人员。

这是我的场景:

  • 我运行一个工人但失败了我返回results.failure()
  • 现在我有一个屏幕显示所有处于Failed状态的工人。
  • 我可以选择删除或重试所有失败的工人
  • 用户点击 (x) 图标可从 UI 中删除失败的工作人员,并将其从 WorkInfoList 中删除,这样它就不会再次显示。
  • 如果没有删除单个 Worker 的选项,那么我如何从 WorkInfoList 中删除它,以便下次用户转到该屏幕时,他不会看到他删除的失败 Worker?
  • 或者,如果有一个选项可以将状态从“失败”更改为“取消”,那么我可以忽略已取消的状态吗?
  • 另外,WorkManager 在多长时间后自动清除其数据库?

任何帮助都感激不尽。谢谢。

android android-workmanager

5
推荐指数
1
解决办法
2451
查看次数

如何减少Android Workmanager的时间?

我一直在检查其他链接(stackoverflow)以减少工作管理器的时间段,但我发现了以下链接

如何减少WorkManager中PeriodicWorkManager的时间

上面的链接说最短时间是 15 分钟。

需要立即从移动设备向服务器发送数据。有没有其他方法可以缩短时间?

请帮我解决这个问题。提前致谢。

android android-workmanager

5
推荐指数
1
解决办法
4792
查看次数

在 api 27、28、29 中混淆应用程序时,工作管理器不会运行

我有一个每 15 分钟运行一次的定期任务。

当混淆应用程序时。如果应用程序从后台被终止,工作管理器将不起作用。

测试设备:一加7T、诺基亚5+、Google Pixel 2模拟器

仅当应用程序位于前台或后台时,工作管理器才会执行。

禁用 proguard 工作管理器在所有 3 种情况下都有效

  1. 该应用程序位于前台

  2. 该应用程序在后台运行

  3. 该应用程序从后台被杀死

根据我在https://issuetracker.google.com/issues/160492142#上提出的问题

proguard 文件中可能存在问题。

 #noinspection ShrinkerUnresolvedReference
 -keepattributes *Annotation*
 -keepattributes SourceFile,LineNumberTable
 # prevent Crashlytics obfuscation
 -keep class com.crashlytics.** { *; }
 -dontwarn com.crashlytics.**
 
 
 -keep public class * extends java.lang.Exception
 -keep class com.google.android.gms.measurement.AppMeasurement { *; }
 
 
 ###################################################################################################
 
 # Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
 # EnclosingMethod is required to use InnerClasses.
 -keepattributes Signature, InnerClasses, EnclosingMethod
 
 # Retrofit does reflection …
Run Code Online (Sandbox Code Playgroud)

android proguard workmanagers android-workmanager

5
推荐指数
1
解决办法
2059
查看次数

Lint 检查“RemoveWorkManagerInitializer”失败,如何修复?

我的 App 类实现了 Configuration.Provider.getWorkManagerConfiguration,关于本文:https ://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#on-demand

我在 AndroidManifest.xml 中使用此字符串切换了默认初始化程序:

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)

该代码按照我的需要工作 - 没有默认的初始化程序调用,但只有 Configuration.Provider.getWorkManagerConfiguration。

如果我运行 lint 检查,我仍然会看到错误:使用按需初始化时删除 androidx.work.impl.WorkManagerInitializer。


  • Android 工作室 4.1 测试版 5
  • Gradle插件:4.1.0-beta05
  • 工作经理:2.3.4

关于如何处理它有什么想法吗?

android lint android-workmanager

5
推荐指数
1
解决办法
1045
查看次数