用工人的意图开始活动,在某些设备上不起作用

发布于 2025-02-13 11:51:06 字数 1556 浏览 2 评论 0原文

我正在尝试使用Worker使用Workmanager API在应用程序在后台时仅在特定时间/日期打开一次活动,它在我的模拟器中确实可以工作在Android 12上,但是当我在Redmi Note 8手机上运行它时,它并没有打开活动,尽管工人正常在同一手机上工作
openActivityWorker.kt

class OpenActivityWorker(val context: Context, private val workerParameters: WorkerParameters) : Worker(context, workerParameters) {
    @OptIn(DelicateCoroutinesApi::class)
    override fun doWork(): Result {
        Handler(Looper.getMainLooper()).post(Runnable {
            val intent = Intent(context, MainActivity::class.java)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            val res = context.startActivity(intent)
            Log.d("OpenActivityWorker", "doWork: $res")
        })
        return Result.success()
    }
}

,我注册了以下内容:

val oneTimeWorkRequestActivity = OneTimeWorkRequest.Builder(OpenActivityWorker::class.java)
            .setInitialDelay(SOME_MILLIS,
                TimeUnit.MILLISECONDS
            )
            .setInputData(
                Data.Builder()
                    .putLong("startAt", SOME_MILLIS)
                    .putLong("id", SOME_ID)
                    .build()
            )
            .build()

WorkManager.getInstance(requireContext()).enqueueUniqueWork(
            "$SOME_ID",
            ExistingWorkPolicy.REPLACE,
            oneTimeWorkRequestActivity
        )

如何解决此问题,并且是否需要某种许可,我需要要求能够从workmanager ?

I am trying to implement a Worker using WorkManager API to open an activity only once on a specific time/date when the app is in background, It does work in my emulator even on Android 12 but when I run it on my Redmi note 8 phone it does not open the activity although the workers are working normally on the same phone
OpenActivityWorker.kt

class OpenActivityWorker(val context: Context, private val workerParameters: WorkerParameters) : Worker(context, workerParameters) {
    @OptIn(DelicateCoroutinesApi::class)
    override fun doWork(): Result {
        Handler(Looper.getMainLooper()).post(Runnable {
            val intent = Intent(context, MainActivity::class.java)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            val res = context.startActivity(intent)
            Log.d("OpenActivityWorker", "doWork: $res")
        })
        return Result.success()
    }
}

And I register the worker as follows:

val oneTimeWorkRequestActivity = OneTimeWorkRequest.Builder(OpenActivityWorker::class.java)
            .setInitialDelay(SOME_MILLIS,
                TimeUnit.MILLISECONDS
            )
            .setInputData(
                Data.Builder()
                    .putLong("startAt", SOME_MILLIS)
                    .putLong("id", SOME_ID)
                    .build()
            )
            .build()

WorkManager.getInstance(requireContext()).enqueueUniqueWork(
            "$SOME_ID",
            ExistingWorkPolicy.REPLACE,
            oneTimeWorkRequestActivity
        )

How to solve this, and is there some kind of permission I need to ask for to be able to start the activities from WorkManager?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愛上了 2025-02-20 11:51:06

在您的第一个代码块中,您什么时候打电话给此行?

class OpenActivityWorker(val context: Context, private val workerParameters: WorkerParameters) : Worker(context, workerParameters) {
...
override fun doWork(): Result {
    Handler(Looper.getMainLooper()).post(Runnable {
        ... 
        val res = context.startActivity(intent)
        ...
    })
    return Result.success()
}

将表达式称为以外的变量;

context.startActivity(intent)

:)

In your first code block, when do you call this line?

class OpenActivityWorker(val context: Context, private val workerParameters: WorkerParameters) : Worker(context, workerParameters) {
...
override fun doWork(): Result {
    Handler(Looper.getMainLooper()).post(Runnable {
        ... 
        val res = context.startActivity(intent)
        ...
    })
    return Result.success()
}

Call the expression outside a variable like;

context.startActivity(intent)

:)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文