我有下面的代码。为什么第二个stopForeground
在Android Studio(Electric Eeel)中突出显示为弃用警告|2022年1月1日)?
class FooService : android.app.Service() {
fun bar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
stopForeground(STOP_FOREGROUND_REMOVE)
} else {
stopForeground(true) // This line shows as deprecated
}
}
}
我使用的是compileSdk 33
和minSdk 21
targetSdk 33
,并且安装了Android SDK构建工具34-rc1
。
2条答案
按热度按时间5anewei61#
如果你使用的是
ServiceCompat
的stopForeground
,按照文档你需要修改stopForeground(Boolean)
,并显式地传递STOP_FOREGROUND_REMOVE
或STOP_FOREGROUND_DETACH
。根据你的compileSDK
,它会抱怨或不抱怨,如果你有compileSDK 33
,它会抱怨,因为在新的API版本中,他们已经修改了那个方法的签名。从
ServiceCompat
的源代码中,您正在尝试使用此stopForeground
,您应该传递一个Service
和一个flag
在内部,它们使用
stopForeground
因此,尝试使用
import androidx.core.app.ServiceCompat.stopForeground
的导入并检查错误是否仍然存在。如果您在
Service
中执行此代码,您应该看到如下deprecation
警告尝试
Invalidate cache and restart
以查看是否存在IDE问题。rjee0c152#
该行突出显示为已过时,因为它已过时。
虽然这是真的,但我觉得用一种让它看起来像错误或需要避免的东西的方式来突出显示这一点似乎很奇怪。这段代码是处理被弃用的方法的标准,所以也许不应该用一种让它看起来像错误的方式来突出显示...被弃用的代码行只运行在它没有被弃用的API级别上。