- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在开发一个在前台服务中运行 MQTT 的应用程序。问题出在小米红米 Note 7 上,在我们终止应用程序后,该服务被终止,但在其他品牌上它工作正常。我没有在 Oppo 和 Vivo 上测试该应用程序,但当我搜索时它们也有问题。在服务的 onCreate
方法中,我调用了 startForeground(NOTIFICATION_ID, notification)
,我在 list 中的服务声明如下
<service
android:name=".service.mqtt.MqttService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="location" />
我还将 foregroundServiceType
更改为 connectedDevice|dataSync|mediaPlayback
并添加 android:stopWithTask="false"
并返回 START_STICKY
在服务的 onStartCommand
方法中,但仍然不起作用。
最佳答案
终于找到答案了here
private static final Intent[] POWERMANAGER_INTENTS = {
new Intent().setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")),
new Intent().setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")),
new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity")),
new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")),
new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity")),
new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")),
new Intent().setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")),
new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")),
new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")),
new Intent().setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")),
new Intent().setComponent(new ComponentName("com.samsung.android.lool", "com.samsung.android.sm.ui.battery.BatteryActivity")),
new Intent().setComponent(new ComponentName("com.htc.pitroad", "com.htc.pitroad.landingpage.activity.LandingPageActivity")),
new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.MainActivity"))
};
for (Intent intent : POWERMANAGER_INTENTS)
if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
// show dialog to ask user action
break;
}
编辑:检查用户是否启用自动启动也存在问题。据我搜索,目前没有可用的解决方案。所以我自己设计了一个解决方案。我创建了一个工作程序,它将每 25 分钟在首选项中节省系统时间。每次打开应用程序时,我都会检查首选项,如果距保存时间超过 30 分钟,则意味着工作人员无法完成工作,因此可能用户上次没有启用自动启动,必须再次提示。
class BackgroundCheckWorker(val appContext: Context, val workerParams: WorkerParameters) :
Worker(appContext, workerParams), KoinComponent {
override fun doWork(): Result {
val pref = appContext.getSharedPreferences(PermissionHandler.AUTO_START_PREF, Context.MODE_PRIVATE)
val editor = pref.edit()
editor.putString(AUTO_START_PREF_KEY, Calendar.getInstance().time.toString())
editor.apply()
return Result.success()
}
}
在启动中我调用这个函数:
fun requestUnrestrictedBackgroundService(context: Activity): Boolean {
val pref = context.getSharedPreferences(AUTO_START_PREF, Context.MODE_PRIVATE)
var updated = false
val lastUpdate = pref.getString(AUTO_START_PREF_KEY, "")
updated = if (lastUpdate == null || lastUpdate == "") {
val editor = pref.edit()
editor.putString(AUTO_START_PREF_KEY, Calendar.getInstance().time.toString())
editor.apply()
false
} else lastUpdate != "" &&
DateUtil.minAgo(lastUpdate) <= 30
if (!updated) {
for (intent in POWERMANAGER_INTENTS)
if (context.packageManager.resolveActivity(
intent,
PackageManager.MATCH_DEFAULT_ONLY
) != null
) {
val dialog = AlertDialog.Builder(context)
dialog.setMessage("On this device you must allow us to run services in background")
.setPositiveButton("Yes") { paramDialogInterface, paramInt ->
val editor = pref.edit()
editor.putString(AUTO_START_PREF_KEY, Calendar.getInstance().time.toString())
editor.apply()
context.startActivityForResult(intent, 1234)
}
.setNegativeButton("Cancel") { paramDialogInterface, paramInt -> context.finish() }
dialog.show()
return false
}
}
return true
}
关于android - 小米和 Oppo 的后台服务受到限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59442078/
我在 Oppo 移动版 - Lollipop 版本中遇到问题。我需要在我的应用程序中写入联系人权限。但在 oppo lollipop 中它要求 oppo 自己的安全许可。如果我拒绝该权限,则应用程序会
此前网上曝光的OPPO Watch 2此番终于迎来发售,据悉,此次OPPO推出的这款全新手表功能非常强大,并且配置十分给力一度被网友们称之为史上最强安卓手表!下面一起来看看了解一下这款OPPO Wa
分享嘉宾:Xiaochun He OPPO,编辑整理:门君仪 澳洲国立大学 **导读:**OPPO是一家智能终端制造公司,有着数亿的终端用户,手机 、IoT设备产生的数据源源不断,设备的智能化服务需要
OPPO 手环今日正式支持通过手环回复微信消息,只需将固件升级到 A.00_0614,安装 2.7.1 版本的健康 App 以及 Android Auto,即可在手环上查看并回复微信消息。 IT之
9月29日消息今天中午,@OPPO 智美生活官方分享了一段视频,OPPO TV 联合 8KRAW 出品,用 4K 120 FPS 超高清画面,横跨天南地北,穿越春夏秋冬,带你领略色彩中国,谨以此片献
12月19日午间消息,在今日的OPPO开发者大会上,OPPO副总裁、新兴移动终端事业部总裁刘波宣布,OPPO将推出IoT启能行动,开放HeyThings IoT协议、HeyThings IoT服务平
我们正在开发一个在前台服务中运行 MQTT 的应用程序。问题出在小米红米 Note 7 上,在我们终止应用程序后,该服务被终止,但在其他品牌上它工作正常。我没有在 Oppo 和 Vivo 上测试该应用
我创建了一个基本应用程序来检查手机状态更改时是否收到广播,但它不起作用。我也尝试过调用和接听电话。我意识到这些是 Vivo、Honor 等设备的常见问题。这是 list
我已经在我的 Android 应用程序中实现了 FCM 推送通知。我在数据有效负载中获得了所有通知 JSON。而且我在 api 上“未添加”“通知”标签。所以在所有状态(前景/背景/杀死)中,我只收到
我想以编程方式将我的应用程序锁定在 oppo 手机中的最近应用程序中,如图所示,以便我可以在应用程序被终止后在后台运行我的服务。是否可以? 最佳答案 确保应用开启。 转到最近使用的应用(这是您经常按下
在今天的OPPO Find X5系列发布会上,除了手机、平板等产品之外,刘作虎还正式宣布OPPO Air Glass智能眼镜将限量上市,今晚开启预售,将于3月3日正式开售,价格4999元。 据悉,
在 Oppo 设备中,当应用程序从最近的应用程序列表中删除时,OnTaskRemoved () 不会被调用,并且当应用程序在后台且屏幕被锁定时,该服务不会运行。 最佳答案 由于 Oppo 拥有自定义
OPPO Watch系列推出了新一轮的系统版本升级。除了新增一系列APP应用之外,此次更新的亮点主要在于手表回复微信、门禁和公交卡等功能的升级。 这次OPPO Watch系列夏至更新,最重要的
我的 crashlytics 中出现了一个奇怪的 InflateException。这仅发生在 Android 5.1 版本的 Oppo 设备中。从堆栈跟踪可以清楚地看出问题出在 TextView 上
每次我将任何应用程序推送到运行 Android 5.1 (API 22) 的 OPPO R7g 时,它甚至在有机会加载之前就崩溃了。我已经尝试在运行 4.1.2 (API 16) 的 Samsung
我努力阻止这个警告消息,但我仍然没有解决这个问题的方法。 如果有人知道最好的解决方案,请在这里分享。 这些是原因: 这对我的开发来说是烦恼 当我错误触摸它时,它可以被禁用。其实我不想禁用它。我只想像其
在我的 android 应用程序中,定位服务作为后台服务实现。我已经用不同的手机(如三星、micromax、Moto、lenovo、nexus)对其进行了测试,它适用于所有手机。但是当我在 Oppo
我正在尝试检测传入的短信,为此我创建了广播接收器来收听传入的短信。当应用程序位于前台时,它可以完美运行。但是当我从最近的应用程序中关闭应用程序时,然后在 Oppo 和 xiaomi 等手机上,Rece
10 月 12 日消息 OPPO 宣布将于 10 月 19 日在上海举行智美生活新品发布会,根据官方在评论区的说法,此次发布会不止有电视新品,还有其它神秘产品。 上月底 @OPPO 智美生
当我的应用程序处于 Activity 状态时,我在广播接收器上收到网络更改事件,但是一旦我重新启动手机(Oppo 手机 4.4.2 版本),我的应用程序就没有收到任何这些事件 - 网络更改,启动完成。
我是一名优秀的程序员,十分优秀!