【问题标题】:On Android mobile phones, can applications choose the APN to use?在Android手机上,应用可以选择使用的APN吗?
【发布时间】:2021-11-17 19:24:15
【问题描述】:

移动网络能够与连接到网络的手机同时建立多个 APN。

当 Android 手机上的 Android 应用程序需要通过网络进行通信时,Android 操作系统是否允许其应用程序选择使用哪个 APN 来进行通信?

请注意,我不是询问如何更改默认 APN。

用例是有一个或多个应用程序需要使用特定的 APNs(例如访问无法通过默认 APN 连接获得的网络资源)但其他应用程序(如 gmail、网页浏览、youtube、Signal等)仍然需要能够访问互联网,因此在使用“特定”APN 时需要同时建立“默认”APN(反之亦然)。

【问题讨论】:

  • 仅当这些 APN 具有使它们与其他 APN 唯一可识别的 NetworkCapability 时。然后,这些应用程序可以通过这些独特的 NetworkCapabilities 请求这些 APN。
  • 谢谢!您是否有可以分享的代码示例 [摘录],显示应用程序如何为具有特定 NetworkCapabilities 的特定 APN 请求 Android 操作系统?

标签: android mobile lte


【解决方案1】:

通常,如果您想要 APN,您会要求使用 TRANSPORT_CELLULAR 的网络。现在,您需要在特定 APN 上有一个 NetworkCapability,您可以使用它来唯一标识它。在这种情况下,我会选择NET_CAPABILITY_NOT_RESTRICTED

此特定功能用于识别不应被选为默认网络的受限网络。现在,欢迎您选择任何您喜欢的NetworkCapability。请记住,NET_CAPABILITY_NOT_RESTRICTED 是一项受限功能,因此您需要提升权限才能请求它。

最后,假设您有第一个 APN 设置以及带有 NetworkCapabilities 的第二个 APN 设置,使其独一无二,然后您可以更新这些应用程序以创建一个 NetworkRequest,然后他们可以使用它来唯一地请求第二个 APN .

因此,在第二个 APN 上,您必须使用其独特的 NetworkCapability 配置对其进行设置。在我们的例子中,删除NET_CAPABILITY_NOT_RESTRICTED,这反过来又使它成为一个受限网络。现在,您创建了一个网络请求,但请求 TRANSPORT_CELLULARremove NET_CAPABILITY_NOT_RESTRICTED,因为默认情况下包含这些。

这是一个演示上述内容的示例:

final NetworkRequest request =
  new NetworkRequest.Builder()
  .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
  .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
  .build();

final ConnectivityManager connectivityManager = (ConnectivityManager)
  context.getSystemService(Context.CONNECTIVITY_SERVICE);

final NetworkCallback networkCallback = new NetworkCallback() {
  ...
  @Override
  void onAvailable(...) {
      // Triggers when this network is available so you can bind to it.
  }

  @Override
  void onUnavailable(...) {
      // Triggers when this network is lost.
  }
  ...
};
connectivityManager.requestNetwork(request, networkCallback);

假设您正确设置了第二个 APN,以上将允许应用程序唯一地请求它,而其他应用程序将继续使用第一个 APN。

【讨论】:

  • 这是一个绝妙的答案!感谢您与我分享您的知识。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 2021-10-18
  • 2017-05-09
  • 2013-06-23
  • 2020-03-29
  • 2012-09-20
  • 1970-01-01
  • 2017-08-13
相关资源
最近更新 更多