Xamarin.Essentials:连接性

Connectivity 类可用于监视设备的网络状况是否发生变化,检查当前的网络访问权限,以及当前的连接方式。

入门

若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。

若要访问 Connectivity 功能,需要以下特定于平台的设置。

需要具有 AccessNetworkState 权限,并且必须在 Android 项目中进行配置。 可以通过以下方法添加此权限:

打开 Properties 文件夹下的 AssemblyInfo.cs 文件并添加 :

C#
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

或更新 Android 清单:

打开 Properties 文件夹下的 AndroidManifest.xml 文件,并在“manifest”节点内添加以下代码 。

XML
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

或右键单击 Android 项目并打开项目的属性。 在“Android 清单”下查找“所需权限:”区域,然后选中“访问网络状态”权限。 这样会自动更新 AndroidManifest.xml 文件。

使用 Connectivity

在类中添加对 Xamarin.Essentials 的引用:

C#
using Xamarin.Essentials;

检查当前网络访问:

C#
var current = Connectivity.NetworkAccess;

if (current == NetworkAccess.Internet)
{
    // Connection to internet is available
}

网络访问分为以下几类:

  • Internet – 本地和 Internet 访问。
  • ConstrainedInternet – 受限 Internet 访问。 指示强制网络门户连接情况,其中可以本地访问 Web 门户,但需要通过门户提供特定凭据才能访问 Internet。
  • 本地 – 仅限本地网络访问。
  • 无 – 无可用连接。
  • 未知 – 无法确定 Internet 连接。

你可以检查设备当前正在使用哪种连接配置文件

C#
var profiles = Connectivity.ConnectionProfiles;
if (profiles.Contains(ConnectionProfile.WiFi))
{
    // Active Wi-Fi connection.
}

只要连接配置文件或网络访问发生变化,就可以接收已触发的事件:

C#
public class ConnectivityTest
{
    public ConnectivityTest()
    {
        // Register for connectivity changes, be sure to unsubscribe when finished
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
    }

    void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
    {
        var access = e.NetworkAccess;
        var profiles = e.ConnectionProfiles;
    }
}

限制

需要注意的是 Internet 可能由 NetworkAccess 报告,但对 Web 的完全访问权限不可用。 由于每个平台上的连接方式不同,因此只能保证连接可用。 例如,设备可能会连接到 Wi-Fi 网络,但路由器与 Internet 断开连接。 在此示例中,可能会报告 Internet,但活动连接不可用。

API

第 9 频道YouTube 上查找更多 Xamarin 视频。