Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?_Android_Android Wifi - Fatal编程技术网

我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?

我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?,android,android-wifi,Android,Android Wifi,我正在开发一个应用程序,可以在手机上运行 将是专用Wi-Fi网络上的一个站点。电话将是一个 站点,而不是接入点,并且专用Wi-Fi网络不支持 路由到互联网。我的应用程序需要与 Internet上的服务器以及本地Wi-Fi网络上的设备, 因此,它需要同时在两个网络上建立连接。 我一直在想怎么做 我一直在尝试讨论中描述的技术 谷歌安卓开发者小组名为“Can” Android 2.X是否同时连接3G和Wifi数据网络?”,但 它工作不好。我发现,当我启用 通过呼叫的蜂窝网络 ConnectivityM

我正在开发一个应用程序,可以在手机上运行 将是专用Wi-Fi网络上的一个站点。电话将是一个 站点,而不是接入点,并且专用Wi-Fi网络不支持 路由到互联网。我的应用程序需要与 Internet上的服务器以及本地Wi-Fi网络上的设备, 因此,它需要同时在两个网络上建立连接。 我一直在想怎么做

我一直在尝试讨论中描述的技术 谷歌安卓开发者小组名为“Can” Android 2.X是否同时连接3G和Wifi数据网络?”,但 它工作不好。我发现,当我启用 通过呼叫的蜂窝网络
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE\u MOBILE)
, 我在Wi-Fi网络上打开的所有插座都已关闭。我没有 我试过了,但我怀疑同样的事情也会发生在手机的插座上 当我切换回Wi-Fi时,手机网络

另一个问题是,, 这些呼叫在全局级别上运行,更改网络设置 对于整个手机,而不仅仅是应用程序。交换网络 像这样进行全局设置将干扰任何其他 正好在打电话。即使在我的应用程序退出之后, 手机将继续使用上次设置的网络配置运行

我正在寻找一种在两个蜂窝网络上都打开连接的方法 同时提供数据和Wi-Fi网络,且不会干扰 手机上运行的其他应用程序

  • 有人知道怎么做吗 这个
  • 有人知道这是否可能吗

  • 如果你不能使用API调用,如果你想在较低的级别上下手,一些linux知识可能会有所帮助。 基本上,你需要做的是打开两个接口,并在3g接口上设置默认路由。 对于此类任务,您必须使用具有root权限的系统命令。
    关闭套接字的原因可能是由于API调用而导致的接口上下波动。

    如果没有root访问权限,应用程序将不会产生太大影响

    使用Android API,您最多只能打开WiFi,希望设备切换到WiFi,然后关闭WiFi,使设备切换到3G(如果有,APN是正确的,等等)

    其他任何东西都不能保证起作用。例如,设置首选连接类型并不保证设备将切换到该类型

    通常情况下,一旦WiFi可用,设备将同时开启3G和WiFi一段时间(3-5秒),然后关闭3G。一旦用户或您的应用程序关闭WiFi,并且设备尝试连接到互联网,它将在短时间后打开3G


    从Android 2.3开始,你不能再禁用/启用3G了。一个用于破坏/恢复APN设置以启用/禁用3G,但从4.0开始,您无法以编程方式更改APN设置。

    我认为一次只能使用一种服务。您可以使用WiFi,也可以使用手机3G数据。两者不能同时工作。

    此线程提到了两种可能的解决方法

  • 每当您希望应用程序使用特定连接时,请设置网络首选项:

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
    
    connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
    
  • 启用高优先级移动数据连接:

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
    
    connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
    

  • 对于第二种方法,它特别声明它适用于Android2.2,不知道它是否也适用于实际版本。然而,据我所知,
    enableHIPRI
    或多或少是一个隐藏的网络设置,因此如果可能的话,我更喜欢第一种方法

    3G和Wifi数据网络不能同时连接,但如果运营商的支持和android框架也发生变化,3G和Wifi可以同时连接。
    现在,一些运营商已经具备了这一功能,但有些运营商却无法做到。

    目前在Android应用程序中不可能同时使用这两个网络,但您可以在PC上实现。
    从WIFI路由器连接一个,从LAN或USB互联网棒连接一个。

    所以,创建应用程序并在PC上使用。如果你不知道如何在PC上运行Android,那就用谷歌吧。

    如果我没有弄错的话,如果Wi-Fi和3G/4G都可用,Wi-Fi将优先

    只有当Wi-Fi不可用时,它才会切换到3G/4G。当然,前提是两者同时打开

    <> P>而不是使用私人Wi-Fi来限制您的选择,您可以考虑使用面向Internet的VPN,以便该设备将从3G/4G连接到VPN,而不是随后访问数据,如果安全性是您关注使用私人Wi-Fi的原因。
    VPN客户端内置在Android中,也有第三方客户端可用。

    您可能需要研究ad-hoc wifi网络。 即使droid已经在使用wifi上网(但不使用ip协议栈),它也可以通过wifi连接到设备

    不要将wifi(IEEE 802.11x)连接与internet(IP)连接混淆。 IP可以在wifi、移动、以太网、DSL、dailup或信鸽上运行,但一次只能运行一个网络

    有关特设wifi网络的更多信息,请查看以下链接


    请注意,许多运营商禁止多播(共享)其IP连接。很好。

    这其实很简单。您需要提交两个请求;一个用于具有
    蜂窝
    传输类型的网络,另一个请求具有
    无线
    传输类型。然后,对于从这些请求返回的任何网络,您都可以根据需要使用它们(例如,仅使用从
    wifi
    请求返回的网络处理内部资源)

    以下是Wi-fi的一个示例:

    final NetworkRequest requestForWifi =
      new NetworkRequest.Builder()
      .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
      .build();
    
    final ConnectivityManager connectivityManager = (ConnectivityManager)
      context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    final NetworkCallback networkCallbackWifi = new NetworkCallback() {
      @Override
      void onAvailable(Network network) {
          // Triggers when this network is available so you can bind to it.
      }
    
      @Override
      void onLost(Network network) {
          // Triggers when this network is lost.
      }
    };
    
    connectivityManager.requestNetwork(requestForWifi, networkCallbackWifi);
    
    为手机发送额外的请求,但使用和同时发送/收听