gpt4 book ai didi

java - 如何检查服务是否在 Android 8 (API 26) 上运行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:09 25 4
gpt4 key购买 nike

升级到 Android 8 后,我的应用程序的某些功能出现问题,甚至没有明确针对 API 26。特别是,用于检查服务是否正在运行的旧功能(如 StackOverflow 上的记录:How to check if a service is running on Android?)不再起作用。

只是为了唤醒我们的集体内存,这是一个经典的方法:

private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}

现在的问题是 getRunningServices 现在已被弃用,不再返回正在运行的服务。有没有人在 Android 8 上遇到过这个问题?是否有可用的官方解决方案(或 hack)?我还应该指出,我要查找的服务与调用 isMyServiceRunning() 的代码在同一进程/应用程序中(仍然提供该功能出于向后兼容的原因)

最佳答案

getRunningServices() 此方法不再对第三方应用程序可用。没有其他方法可以获取正在运行的服务。

https://developer.android.com/reference/android/app/ActivityManager.html#getRunningServices(int)

如何检查服务是否在 Android 上运行?)我只是手动检查它,当服务运行时我将 boolean 值设置为真,当服务停止或销毁时我将 boolean 值设置为假。我正在使用 SharedPreferences 来保存 boolean 值。

服务类

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
Log.d("service", "onStartCommand")
setRunning(true)
}

private fun setRunning(running: Boolean) {
val sessionManager = SessionManager(this)
sessionManager.isRunning = running
}


override fun onDestroy() {
setRunning(false)
super.onDestroy()
}

SessionManager.class

class SessionManager(var context: Context) {
private val loginpreferences: SharedPreferences
private val logineditor: SharedPreferences.Editor

init {
loginpreferences = context.getSharedPreferences(Pref_name, private_modde)
logineditor = loginpreferences.edit()
}

var isRunning: Boolean
get() = loginpreferences.getBoolean(SERVICES, false)
set(value) {
logineditor.putBoolean(SERVICES, value)
logineditor.commit()
}

companion object {
private val SERVICES = "service"
}

}

关于java - 如何检查服务是否在 Android 8 (API 26) 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48506971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com