MapActivity上的NoClassDefFoundError

时间:2013-06-14 12:49:35

标签: android google-maps

在某些设备上,我们的应用程序在启动Map活动时会因NoClassDefFoundError而崩溃。

是的,我们拥有权限和库以及运行MapActivity所需的所有东西。它在99.9%的设备上运行良好(所有设备都有谷歌服务...)

然而,我从未听说过2-3种设备(例如:Prestigio-PAP4040_DUO或MID-PAD-FMD700P或rockchip AN9G2)似乎没有谷歌服务,也没有可能打开地图活动。

有没有机会检测到这个并且可能显示类似“你的手机不支持谷歌地图,对不起”?

(是的,我们可以忽略2-3个设备,但我们会尝试支持所有设备)

1 个答案:

答案 0 :(得分:3)

  

有没有机会检测到这个并且可能显示类似“你的手机不支持谷歌地图,对不起”?

如果你的MapActivity没有绑定到启动器图标,也许。我猜您的NoClassDefFoundError来自MapActivity或来自Maps V1 SDK插件的其他内容。在这种情况下,在尝试启动任何Class.forName()之前,请使用MapActivity检测您是否有来自Google地图的类。

This sample project证明了这一点。启动器图标与Theme.NoDisplay活动相关联,该活动具有以下onCreate()

  public void onCreate(Bundle instanceState) {
    super.onCreate(instanceState);

    try {
      Class.forName("com.google.android.maps.MapActivity");
      startActivity(new Intent(this, NooYawk.class));
    }
    catch (Exception e) {
      Toast
            .makeText(this,
                       "Google Maps are not available -- sorry!",
                       Toast.LENGTH_LONG)
            .show();
    }

    finish();
  }

如果我们的测试显示MapActivity是否存在成功,我们可以安全地启动MapActivity(此处命名为NooYawk)。如果我们收到异常,我们只需退出Toast