当前位置: 首页 > 知识库问答 >
问题:

Android O预览:ConnectivityManager删除的方法不向后兼容

佟涵畅
2023-03-14

预条件和构建配置:我正在尝试用AndroidStudio 2.4 review 5构建我的应用程序,方法是为Android O perview设备设置以下构建配置参数,compileSdkVersion'android-o'buildToolsVersion'25.0.0'compileoptions.encoding='iso-8859-1'minSdkVersion 16 targetSdkVersion'O'//启用multidex支持。multiDexEnabled真

问题描述:我的应用程序使用以下ConnectivityManager类的不推荐方法,用于安装较旧版本Android的设备。-ConnectivityManager.StartusingNetworkFeature()-ConnectivityManager.StopusingNetworkFeature()-ConnectivityManager.RequestRouteToHost()

当我试图构建具有上述api的应用程序时,它会给出如下编译时错误,

错误:(626,48)错误:找不到符号方法startUsingNetworkFeature(int,String)错误:(7393,27)错误:找不到符号方法stopUsingNetworkFeature(int,String)错误:(69,36)错误:找不到符号方法requestRouteToHost(int,int)

理想情况下,为了向后兼容的目的,这些api不应该给出编译时错误。请让我知道如何解决这些编译时错误。

我无法从代码中删除这些方法,因为这些方法对于较旧的android版本(低于android L版本)的设备是必需的

共有1个答案

楚灿
2023-03-14

在您的项目中制作一个新的android库模块。确保此库具有compilesdkversion25。然后将以下类放在库中:

@SuppressWarnings("Deprecation")
public class NetworkFeaturesCompat {
    public static NetworkFeaturesCompat from(final ConnectivityManager cm) {
        return new NetworkFeaturesCompat(cm);
    }

    private final ConnectivityManager mConnectivityManager;

    private NetworkFeaturesCompat(final ConnectivityManager cm) {
        mConnectivityManager = cm;
    }

    public int startUsingNetworkFeature(final int networkType, final String feature) {
        return mConnectivityManager.startUsingNetworkFeature(networkType, feature);
    }

    public int stopUsingNetworkFeature(final int networkType, final String feature) {
        return mConnectivityManager.stopUsingNetworkFeature(networkType, feature);
    }

    public boolean requestRouteToHost(final int networkType, final int hostAddress) {
        return mConnectivityManager.requestRouteToHost(networkType, hostAddress);
    }
}

现在,通过修改build.gradle文件,使您的主模块依赖于这个库:

dependencies {
    compile project(":your-new-library-module-name")
}

构建您的项目。

现在您可以从您的主项目中使用这个helper类了。

您可能需要将此添加到您的proguard规则中(我还没有实际测试过此位):

-dontwarn android.net.ConnectivityManager

请注意,这种方法仍然会在Android6+上抛出unsupportedoperationexception

库模块是根据SDK25编译的,其中的方法仍然是公共API的一部分。这就是它在编译时不会崩溃的原因。

由于整个项目是根据SDK26编译的,proguard可能会抱怨缺少方法。在这种情况下,不要理会投诉。

 类似资料:
  • 我有两个Avro模式V1和V2,在spark中读取如下: V1有两个字段“一”和“二” V2 与新字段:“三” 场景:编写器使用 V1 进行写入,读取器使用 V2 对 avro 记录进行解码。我的期望是看到字段3填充了默认值,即null。但是我在spark工作中遇到了以下异常。 我是不是错过了什么?我的理解是avro支持向后兼容。

  • 我有两个ssl文件- 我如何使Dropwizrad与它的嵌入式码头在SSL中工作? 谢谢。编号

  • ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版

  • 我使用相机仅显示预览(不拍照或录制视频)。 该应用程序始终处于竖屏状态(横向模式被禁用)。相机预览始终旋转90度ccw,我无法更改它(无论是还是和。 预览总是这样旋转还是依赖于设备?如果在纵向模式下总是这样,我可以在之后旋转图像。 或者有没有办法正确设置摄像头?我读了很多关于这个的帖子,但没有一个答案对我有用(Galaxy s2,Android v2.3)

  • 我想选择多个图像,并给这些图像一个按钮,以便用户可以删除图像以及。我可以做图像的预览,但我不能删除图像后预览。 这是我的javascript代码 这是我的HTML代码,其中id=list是图像显示为缩略图的区域: 如何插入删除选项与每一个图像?