我收到这个错误: “未捕获的处理程序:线程主退出由于未捕获的异常 java.lang.VerifyError”
它只发生在 1.6 上。 Android 2.0 及更高版本没有任何问题,但这是所有问题的重点。
我无法捕捉到错误/异常 (VerifyError),我知道它是由调用 isInitialStickyBroadcast() 引起的,这在 SDK 4 中不可用,这就是它被包装在 SDK 检查中的原因。我只需要这个 BroadcastReceiver 在 2.0+ 上工作而不在 1.6 中中断,它是市场上的一个应用程序,2.0+ 上的用户需要 UNDOCK 功能,但显然在 1.6 上不需要,但仍有相当数量的用户在 1.6 上。
如何修复?
谢谢!
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()) {
int dockState = intent.getExtras().getInt("android.intent.extra.DOCK_STATE", 1);
if (dockState == 0)
{
finish();
}
}
}
}
};
最佳答案
Intent.EXTRA_DOCK_STATE
仅存在于 API 级别 5 及更高版本中,因此只能在 Android 2.0 设备(或更高版本)上运行。
即使您将调用包装在 API 级别检查中,当您在 Android 1.6 运行时上运行代码时,代码也会失败,因此会出现 VerifyError
。
解决方案是将对 Intent.EXTRA_DOCK_STATE
的调用替换为其常量值:android.intent.extra.DOCK_STATE
。
作为一般规则,最好在浏览 API 文档时勾选“按 API 级别过滤”复选框,并根据您的情况将其设置为 4。这样,Android 1.6 不可用的任何类、方法或常量都将显示为灰色。
关于android - 无法捕获 java.lang.VerifyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014102/