qt for android实现app内通过按键后台运行程序

经实验发现,在程序中创建定时器后定时打印消息。在通过按手机的home键后,程序虽然没有关闭,但是运行状态是停止的,所以这就需要解决问题了。这个帖子主要目的就是讲解如何实现通过手机home键或者app内置按键实现程序到后台,且后台程序保持运行。参考链接https://blog.csdn.net/luoyayun361/article/details/57386113?utm_source=blogxgwz0

 

按链接即可实现控制后台,这里要分享一下我的使用心得,在实现了按键控制后台运行之后,发现是和按home键有一样的效果,即定时器在后台就不运行了,这不是我想要的效果,所以以上连接的内容仅供参考为如何通过按键去控制程序在后台执行,相当于home键效果,我接下来要讲解和分享的是如何让程序退到后台仍能保持运行去处理 数据。


2019年5月13日11:20:52

时间太紧迫了,没有时间处理,这几天晚上抽空研究一下如何实现在发表到博中。


本博主要还是说明一下如何把程序缩到后台,不是退出程序吧,因为这几天的研究发现,让程序在后台运行,学名叫Android保活,非学名叫流氓软件是如何关闭不掉的,其实我还不算是 那种流氓软件,因为要实现的不是退出程序了还在运行,只是特意按home键之后,想让程序在后台 运行,与流氓软件还是有一些区别的,这几天查到资料实现这种效果的方式,基本都是说使用wakelock,创建service,监听锁屏广播,等等,尝试了wakelock在qt中,但是没能实现效果,锁屏和home键之后依然主线程被挂起,然后再次回到程序中会继续之前的程序运行,目前对Android不是很了解,就去开发,是个大坑,service也不是很会用,有时间在尝试一下,有新的进展在分享出来

Android实现后台保活程序通常可以通过以下几种方式: 1. 使用 Foreground Service:将应用程序的 Service 设为 Foreground Service,这将使操作系统将其视为正在运行的前台应用程序,从而使其更难被系统杀死。 2. 使用 AlarmManager:使用 AlarmManager 提交一个定期的任务,以确保您的应用程序在后台继续运行。 3. 使用 JobScheduler:JobScheduler 是一个 Android 系统服务,它为您提供了在特定条件下启动作业的能力。您可以设置一项作业,并定义一个触发器,以便在特定条件下启动该作业。 4. 使用 WorkManager:WorkManager 是一个用于在 Android 上安排后台任务的库。它可以在 Android API 14(Android 4.0 Ice Cream Sandwich)及更高版本上运行,可以在设备空闲时运行任务,也可以在设备重新启动后保留任务。 在使用 Qt for Android 开发应用程序时,您可以使用 Qt Android Extras 模块中的 QAndroidJniObject 类,通过 JNI 调用 Android API 提供的上述机制来实现后台保活程序。例如,您可以使用以下代码将应用程序的 Service 设为 Foreground Service: ```cpp QAndroidJniObject jniObject("org/qtproject/example/MyService"); if (jniObject.isValid()) { QAndroidJniObject activity = QtAndroid::androidActivity(); if (activity.isValid()) { jint id = 1; QAndroidJniObject notification = QAndroidJniObject::fromString("Foreground Service is running."); QAndroidJniObject channelId = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/Settings$Secure", "ANDROID_ID"); QAndroidJniObject builder("android/app/Notification$Builder", "(Landroid/content/Context;Ljava/lang/String;)V", activity.object<jobject>(), channelId.object<jstring>()); builder.callObjectMethod("setContentTitle", "(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;", notification.object<jstring>()); builder.callObjectMethod("setContentText", "(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;", notification.object<jstring>()); builder.callObjectMethod("setSmallIcon", "(I)Landroid/app/Notification$Builder;", 0); QAndroidJniObject notificationObj = builder.callObjectMethod("build", "()Landroid/app/Notification;"); QAndroidJniObject service = QtAndroid::androidService(); if (service.isValid()) { service.callMethod<void>("startForeground", "(ILandroid/app/Notification;)V", id, notificationObj.object<jobject>()); } } } ``` 此代码将使用 QAndroidJniObject 调用 Android API 的 startForeground 方法,以将应用程序的 Service 设为 Foreground Service。请注意,您需要在 AndroidManifest.xml 文件中声明您的 Service,并在应用程序启动时启动该 Service。 希望这可以帮助您实现后台保活程序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大桶矿泉水

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值