2

是否有任何适用于 Android 的条件编译?我正在尝试使用 android.webkit.WebView.onPause(),同时还支持 Android API 8。

我尝试了 Fiddler 和 Andrey Voitenkov 在Conditional compile in Android 中提出的解决方案?

public void pause()
{
    int version = android.os.Build.VERSION.SDK_INT;
    if(version >= 11)
    {
        webViewOnPause(_webView);
    }
    super.onPause();
}

@TargetApi(11)
void webViewOnPause(final android.webkit.WebView webview)
{
    new Runnable() {
        public void run() {
            new PauseStuffAvailableOnHC(webview);
        }
    }.run();
}

class PauseStuffAvailableOnHC
{
    @TargetApi(11)
    public PauseStuffAvailableOnHC(android.webkit.WebView webview)
    {
        webview.onPause();
    }
}

...但我仍然无法编译/运行应用程序:

“WebView 类型的 onPause() 方法未定义”

“您的项目包含错误,请在运行您的应用程序之前修复它们。”

我做错了什么,还是根本不可能做到这一点?

4

1 回答 1

1

您的代码看起来不错,它会在使用仅从该版本开始可用的功能之前检查最低 SDK 版本。因此,如果您在版本低于 API 11 的 Android 设备上运行您的应用,则不会执行该代码。但如果它在具有 API 11 或更高版本的 Android 设备上运行,它将被执行。

所以这意味着,您的应用程序应该至少针对 API 11 进行编译,因为它包含 API 11 中引入的功能。根据它运行的版本,该功能将被启用或不启用。

为此,请调整您的AndroidManifest.xml

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />

这将根据 API 11 构建您的 Android 应用程序,但仍允许在运行 API 8 或更高版本的 Android 设备上使用它。

于 2015-03-25T09:48:13.477 回答