gpt4 book ai didi

android - 如何调用 "isInitialStickyBroadcast()"并避免在 1.6 上出现问题?

转载 作者:行者123 更新时间:2023-11-30 04:53:23 29 4
gpt4 key购买 nike

isInitialStickyBroadcast() 显然只有在 2.0 (SDK 5) 之后才可用。

我收到这个错误:

"Uncaught handler: thread main exiting due to uncaught exception java.lang.VerifyError"

它只发生在 1.6 上。 Android 2.0 及更高版本没有任何问题,但这是所有问题的重点。

我无法捕捉到错误/异常 (java.lang.VerifyError),我知道它是由调用 isInitialStickyBroadcast() 引起的,这在 SDK 4 中不可用,这就是它被包装在 SDK 检查中的原因。

我只需要这个 BroadcastReceiver 在 2.0+ 上工作而不在 1.6 中中断,它是市场上的一个应用程序,2.0+ 上的用户需要 UNDOCK 功能,但显然在 1.6 上不需要,但有相当多的用户仍在 1.6 上。

这是我正在使用的部分代码的易读版本。请注意,它包含在 SDK 检查中以仅在 2.0+ 上运行,但 VerifyError 仍然出现。

private BroadcastReceiver mUndockedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//FROM ECLAIR FORWARD, BEFORE DONUT THIS INTENT WAS NOT IMPLEMENTED
if (Build.VERSION.SDK_INT >= 5)
{
if (!isInitialStickyBroadcast()) {
//Using constant instead of Intent.EXTRA_DOCK_STATE to avoid problems in older SDK versions
int dockState = intent.getExtras().getInt("android.intent.extra.DOCK_STATE", 1);
if (dockState == 0)
{
finish();
}
}
}
}
};

最佳答案

您的问题是,虽然您不会执行 isInitialStickyBroadcast(),但类加载器会在加载类时尝试解析所有方法,因此您的 SDK 4 设备此时会失败,因为有没有 isInitialStickyBroadcast()

您有两个主要选择:

  1. 使用反射。
  2. 创建两个版本的 BroadcastReceiver,作为它们自己文件中的公共(public)类。一个具有 SDK 4 逻辑,一个具有 SDK 5+ 逻辑。在您调用 registerReceiver() 时根据 SDK 检查注册您想要的。

关于android - 如何调用 "isInitialStickyBroadcast()"并避免在 1.6 上出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035197/

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