setPluginState和setPluginsEnabled

时间:2012-03-31 21:30:21

标签: android

我的Android应用程序最初用于Android 2.2以上,因此我使用了

player.getSettings().setPluginState(WebSettings.PluginState.ON);

用于WebView对象。

现在我决定向Android 2.1用户打开我的应用程序,我将代码更改为:

try {
  player.getSettings().setPluginState(WebSettings.PluginState.ON);
} catch (Exception e) {
  player.getSettings().setPluginsEnabled(true);
}

这样,应用程序强制关闭,我在logcat上出现此错误:

Uncaught handler: thread main exiting due to uncaught exception
java.lang.NoClassDefFoundError: android.webkit.WebSettings$PluginState
    at com.dokgu.joindota.WatchVOD.onCreate(WatchVOD.java:34)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)

有关此错误的任何帮助吗?

编辑: 此错误仅出现在2.1仿真器上。

1 个答案:

答案 0 :(得分:7)

有点晚了 - 我确定你现在已经弄明白了 - 但错误是因为Android版本上没有类PluginState< 2.2(API 8)。请参阅the android docs on PluginState

您无法通过try {} catch (Exception e) {}发现这一点的原因是因为NoClassDefFoundError不是Exception - 它是Error。虽然ErrorException都是Throwable的子项,但它们并不相同,因此您无法使用Error来抓住Exception,反之亦然。

要解决此问题,您可以采取以下任一方法:

  1. 检查设备运行的Android版本,并在设备运行API版本> = 8时仅调用PluginState

  2. catch()语句中,抓住NoClassDefFoundError代替Exception

  3. 此外,Eclipse很可能会显示提示PluginState的Lint警告 - 类仅适用于API 8+。您可以通过在方法上方的行中添加@SuppressLint("NewApi")来隐藏/忽略此警告。