我收到此错误:“未捕获的处理程序:由于未捕获的异常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无法使用的所有类,方法或常量都将变灰。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。