我要使用的代码:
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
在API 27中有一个被弃用的FLAG_SHOW_WHEN_LOCKED
,它的替代setShowWhenLocked
被添加到API 27中。如果我的项目中的minSdk
是21,targetSdk是33,我应该如何正确使用它?
我收到警告is deprecated. Deprecated in Java
即使我这样处理:
if(Build.VERSION.SDK_INT >= 27) {
setShowWhenLocked(true)
setTurnScreenOn(true)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
}
我仍然得到警告。什么是正确的方式来支持旧的和新的API?
1条答案
按热度按时间hs1ihplo1#
顶级域名
1.对不同的API版本使用不同的代码。
2.如果您正确处理了应用程序所针对的所有API版本,请忽略/抑制此警告
3.如果有一个新的替代方案,所有的
API
工作-使用它说明
1.在条件中使用
Build.VERSION.SDK_INT
,以根据SDK_INT执行相应操作1.如果
SDK_INT>=27
,则使用setshowwhenlocked
;如果SDK_INT<27
,则使用FLAG_SHOW_WHEN_LOCKED
1.抑制警告
FLAG_SHOW_WHEN_LOCKED/setShowWhenLocked
的示例但我们为什么要超越警告呢?
出现警告的原因是**
@Deprecated
API没有任何元数据来指示它们在哪个SDK中被弃用。**正如您在this issue中所看到的。我们可以抑制错误,因为我们已经正确处理了旧API(5-27)和新API(27〉)警告
如果在使用正确API的情况下使用if条件无法正确处理代码,请不要抑制这些警告。
举例说明你不能做什么
您的minSdk为21,targetSdk为33这段代码可以在使用5-27 API(Android 5 - Android 8. 1)的设备上运行,但不能在新设备上运行。您必须正确处理这两种情况。
Vibrator
的示例用老办法弄到振动器
获得振动器的新方法
如果替代项向后兼容
如果一个替代方案是向后兼容的,你可以使用它来代替旧的方式
示例
如果在Activity中继承
AppCompatActivity
:如果调用
startActivityForResult
,则会遇到startActivityForResult(Intent!, Int): Unit' is deprecated. Deprecated in Java
警告:您可以按Alt+Q(默认键绑定)来查看
Context info
(在AndroidStudio中是这样调用的,您可以检查您的键Map)或使用网站来查看文档x1c 0d1x请注意,此方法已被弃用,您必须改用registerForActivityResult
。此方法现在可以在任何版本中调用,文档中没有Added/Deprecated
“部分”。**问题:**您是如何找到此文档的?我在Google上搜索了
AppCombatActivity startActivityForResult
,找到了this文档。没有关于startActivityForResult
的任何文字。**答:**在IDE中打开有关此方法的上下文信息(Alt+Q),然后查看
Context info
的底部。此方法位于(
ComponentActivity
)中,其中有一个类名。您必须使用google搜索ComponentActivity startActivityForResult
,而不是AppCombatActivity startActivityForResult