android - 无法捕获 java.lang.VerifyError

标签 android

我收到这个错误: “未捕获的处理程序:线程主退出由于未捕获的异常 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/

相关文章:

java - Android - 启用 Proguard 后应用程序崩溃

android - 如何观察内容提供者的变化?安卓

android - 带有 Phonegap Build 和 PushPlugin 的 Android 的白色通知图标

Android:SensorManager.getRotationMatrix 和 SensorManager.getOrientation() 的算法

android - 如何使用 adb shell 命令将所有应用程序流量重定向到代理服务器?

java - 我无法使用 GSON 将 JSON 转换为 class<T>

android - 如何通过布局 xml 文件更改 ExpandableListView 中子分隔符的颜色?

android - 来电广播接收器不工作

java - 在Java中找到特定的字符并替换它

android paypal 应用内支付 : failed to initialize paypal library