gpt4 book ai didi

android - 移动数据开启时通过wifi(无互联网)发送数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:23 34 4
gpt4 key购买 nike

我正在开发通过 wifi(由设备生成)连接到硬件设备并通过套接字连接向其发送数据的应用程序。问题是,当移动数据(3G/4G)被激活时,android 会尝试通过它发送数据,而不是通过设备生成的 wifi 发送数据,因为 wifi 没有互联网连接。我正在考虑使用 ConnectivityManager#setNetworkPreference()但它已在 api 21 中弃用。

如何设置为使用设备生成的wifi而不是移动数据接口(interface)发送数据?

最佳答案

经过大量研究和时间尝试理解这一切后,我发现这在 Android 5.0 (Lollipop) 之前的版本中是不可能的,操作系统一次只能保持一个网络接口(interface),而应用程序不会无法控制。

因此,为了在大于或等于 Lollipop 的版本上执行此操作,我执行了以下操作:

  1. 在进行套接字连接之前,请检查 android 是否大于或等于 Lollipop,以防它不是您正常执行的任何操作;
  2. 如果版本等于或高于 Lollipop,您需要执行以下操作:

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    final ConnectivityManager manager = (ConnectivityManager) context
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkRequest.Builder builder;
    builder = new NetworkRequest.Builder();
    //set the transport type do WIFI
    builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    manager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    manager.bindProcessToNetwork(network);
    } else {
    //This method was deprecated in API level 23
    ConnectivityManager.setProcessDefaultNetwork(network);
    }
    try {
    //do a callback or something else to alert your code that it's ok to send the message through socket now
    } catch (Exception e) {
    e.printStackTrace();
    }
    manager.unregisterNetworkCallback(this);
    }
    });
    }
  3. 完成后,您应该停止将进程与此绑定(bind):

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    ConnectivityManager manager = (ConnectivityManager) InovePlugApplication.getContext()
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    manager.bindProcessToNetwork(null);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ConnectivityManager.setProcessDefaultNetwork(null);
    }

这个答案帮助我理解了如何去做 https://stackoverflow.com/a/29837637/2550932 .

关于android - 移动数据开启时通过wifi(无互联网)发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152417/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com