android - setPluginState 和 setPluginsEnabled

标签 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 模拟器上。

最佳答案

有点晚了 - 我相信你现在已经弄明白了 - 但错误是由于类 PluginState 在 Android 版本 < 2.2 (API 8) 上不可用引起的。参见 the android docs on PluginState .

您无法使用 try {} catch (Exception e) {} 捕获它的原因是因为 NoClassDefFoundError 不是 Exception - 这是一个 Error .虽然 ErrorException 都是 Throwable 的子级它们不一样,因此您不能用 Exception 捕获 Error,反之亦然。

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

  1. 检查设备运行的 Android 版本,只有当设备运行 API-version >= 8 时才调用 PluginState

  2. 在您的 catch() 语句中,捕获 NoClassDefFoundError 而不是 Exception

此外,Eclipse 很可能会显示一条 Lint 警告,指出 PluginState 类仅在 API 8+ 上可用。您可以通过将 @SuppressLint("NewApi") 添加到方法上方的行来隐藏/忽略此警告。

关于android - setPluginState 和 setPluginsEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959851/

相关文章:

Android自定义自动完成textview图标和文字

android - 应用程序类 Android 的需要/可用性?

android - 为什么 Android Studio 模拟器非常慢?

android - 如何使用带有 AsyncTask 的 Android Studio 读取 Internet 中的文件?

java - 如何从 reSTLet ClientResource 获取响应?

java - 取消异步任务的最佳方法

android - ViewBinding - 如何获得包含布局的绑定(bind)?

android - java - 将文件发送到服务器时 Android HttpPost 黑屏

javascript - 在不禁用 Javascript 的情况下在 WebView 中禁用 HTML5

android - ResultReceiver 无法幸免于屏幕旋转