标签: android-workmanager

使用OS独立路径"META-INF/proguard/androidx-annotations.pro"找到多个文件

我正在尝试android WorkManager,代码抛出错误"运行时发现多个文件与OS独立路径'META-INF/proguard/androidx-annotations.pro ",我尝试了以下答案,它没有帮助.

WorkManager依赖项

的build.gradle(APP)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "rock.dmx.xaro.workmanagerexample"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


}

dependencies {
    def work_version = "1.0.0-alpha09"
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation "android.arch.work:work-runtime:$work_version"
}
Run Code Online (Sandbox Code Playgroud)

android-workmanager

66
推荐指数
4
解决办法
3万
查看次数

针对 S+(版本 31 及更高版本)要求在创建 PendingIntent、On AlarmPingSender 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

问题

面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。我在将目标 SDK 更新到 31 后得到它。错误总是出现在 AlarmPingSender 之后。但我不知道任何使用 AlarmPingSender 的类。


2021-10-31 10:43:04.990 17031-17341/com.app.mobile D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.com.app.mobile-2e24ccbde048f2e91635651784
2021-10-31 10:43:04.993 17031-17341/com.app.mobile E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: com.app.mobile-2e24ccbde048f2e91635651784
    Process: com.app.mobile, PID: 17031
    java.lang.IllegalArgumentException: com.app.mobile: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
    Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-pendingintent android-workmanager android-12

57
推荐指数
4
解决办法
7万
查看次数

如何解决已存在的程序类型:com.google.common.util.concurrent.ListenableFuture?

我正在尝试使用WorkManager 1.0.0-alpha09.我收到此错误:

Program type already present: 
com.google.common.util.concurrent.ListenableFuture

Message{kind=ERROR, text=Program type already present: 
com.google.common.util.concurrent.ListenableFuture, sources=[Unknown source 
file], tool name=Optional.of(D8)}
Run Code Online (Sandbox Code Playgroud)

如果我使用版本1.0.0-alpha08或更少.我没有得到这个错误,但我需要公共构造函数

public Worker(Context context, WorkerParameters workerParams)
Run Code Online (Sandbox Code Playgroud)

java android guava android-workmanager

46
推荐指数
3
解决办法
1万
查看次数

setExpedited 是如何工作的?它是否与前台服务一样好且可靠?

背景

以前我都是用一个前台的IntentService来处理纷至沓来的各种事件。然后当 Android 11 到来时(Android R,API 30)它就被弃用了,据说更喜欢使用使用setForegroundAsync 的Worker ,所以我就这么做了。

val builder = NotificationCompat.Builder(context,...)...
setForegroundAsync(ForegroundInfo(notificationId, builder.build()))
Run Code Online (Sandbox Code Playgroud)

问题

随着 Android 12 的到来(Android S,API 31),仅在之后的一个版本,现在setForegroundAsync被标记为已弃用,并且我被告知要使用setExpedited来代替:

* @deprecated Use {@link WorkRequest.Builder#setExpedited(OutOfQuotaPolicy)} and
* {@link ListenableWorker#getForegroundInfoAsync()} instead.
Run Code Online (Sandbox Code Playgroud)

问题是,我不确定它到底是如何工作的。之前,我们有一个通知,当用户使用前台服务时应该向用户显示该通知(至少对于“旧”Android 版本)。现在看来getForegroundInfoAsync用于它,但我认为它不会用于 Android 12 :

在 Android S 之前,WorkManager 代表您管理和运行前台服务来执行 WorkRequest,显示 ForegroundInfo 中提供的通知。要随后更新此通知,应用程序可以使用NotificationManager。

从 Android S 及更高版本开始,WorkManager 使用即时作业来管理此 WorkRequest。

关于它的另一个线索是(这里):

从 WorkManager 2.7.0 开始,您的应用程序可以调用 setExpedited() 来声明 Worker 应使用加急作业。这个新 API 在 Android 12 上运行时使用加急作业,并且该 API 使用以前版本的 Android …

android android-workmanager android-12

42
推荐指数
2
解决办法
1万
查看次数

使用WorkManager在特定时间安排工作

WorkManager是一个用于排队工作的库,保证在满足约束条件后执行.

因此,在通过Constraints类之后,我没有找到任何函数来为工作添加时间约束.例如,我想在上午8:00开始工作(工作可以是OneTimeWorkRequestPeriodicWorkRequest中的任何一种).如何使用WorkManager添加约束来安排此工作.

android android-workmanager

37
推荐指数
4
解决办法
1万
查看次数

Android 12:使用 SCHEDULE_EXACT_ALARM 权限在特定时间获取/显示数据在 Google Play 政策中是否安全?

我在 Play 商店里有一个 Android 应用程序已经有 8 年了。最近Google发布Android S或12引入了一些前台服务启动限制

https://developer.android.com/about/versions/12/behavior-changes-12#foreground-service-launch-restrictions

确切的警报权限

https://developer.android.com/about/versions/12/behavior-changes-12#exact-alarm-permission

在应用程序中,我使用前台服务和闹钟来安排来自云和设备传感器的天气数据更新,并向用户发送通知,更新小部件。但他们说:确切的警报应该只用于面向用户的功能,所以如果我继续使用这些 API,它是安全的(根据 Google Play 政策)?

我问这个问题是因为其他解决方案(例如带有前台服务和工作管理器的粘性通知)无法满足我的要求。

android scheduler alarmmanager android-alarms android-workmanager

36
推荐指数
2
解决办法
5万
查看次数

Android WorkManager中的异步工作者

谷歌最近宣布了新的WorkManager架构组件.通过WorkManagerdoWork()课堂上实现,可以很容易地安排同步工作,但是如果我想在后台进行一些异步工作呢?例如,我想使用Retrofit进行网络服务调用.我知道我可以发出同步网络请求,但它会阻塞线程并且感觉不对.有没有解决方案,或者目前还不支持?

android android-architecture-components android-workmanager

29
推荐指数
6
解决办法
1万
查看次数

Android WorkManager与JobScheduler

如果我们已经有一个JobScheduler以及一些具有相同功能的漂亮的后端(AndroidJobFirebaseJobDispatcher),为什么我们需要新的Android WorkManager?它有任何杀戮功能吗?因为我没有看到任何让我想要迁移到另一个调度程序的东西.

android android-jobscheduler android-workmanager

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

Android系统.应用程序关闭时WorkManager是否正在运行?

我想安排每晚数据库更新.所以我使用新的Android WorkManager.我的理解是,一旦安排它将始终独立于应用程序的生命周期在后台运行.是对的吗?我的第一次测试显示Work只在应用程序运行时执行.

val locationWork = PeriodicWorkRequest.Builder(UpdateDatabaseWorker::class.java, 24, TimeUnit.HOURS)
                        .addTag("DATABASE_UPDATE_SERVICE")
                        .build()
WorkManager.getInstance().enqueue(locationWork)
Run Code Online (Sandbox Code Playgroud)

android android-service android-jetpack android-workmanager

25
推荐指数
2
解决办法
2万
查看次数

Android 12 - 前台服务启动限制

我正在开发一个SDK,需要从后台启动Foreground服务。因为它使用的是后台定位和蓝牙相关的作品。如果应用程序被终止,监控将在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。

目前,我的 SDK 使用Service来处理这项工作。但Android 12上不支持从后台启动服务。

我试图从后台启动服务,下面的异常抛出。

ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false
Run Code Online (Sandbox Code Playgroud)

我如何使用WorkManager 来解决这个问题,我的所有处理都是由 Service 类完成的,如何将 Service 对象传递给Worker类并在 Worker 类中启动此作业。

实际上,我的项目是基于信标技术的。信标信号用于向用户显示不同的推荐。

在我当前的实现中,如果应用程序被用户杀死,并且还接受前台服务,则SDK将在后台运行。并检测信标并提供适当的操作。

我的实现是,如果应用程序使用前台服务“关闭”来初始化我的 SDK,那么稍后,当应用程序位于后台并尝试从后台启动前台服务时,会抛出此异常。与前台服务相关的决策由服务器端 API 持有。我定期检查服务器端值是否更改,如果值更改,则更改后的操作会反映在 SDK 中。

android android-service foregroundnotification android-workmanager android-12

24
推荐指数
2
解决办法
3万
查看次数