c# - 使用 Xamarin.Android 在 C# Windows 窗体应用程序中打开/关闭 Android 设备移动数据

标签 c# android xamarin xamarin.forms xamarin.android

我有一个 Windows 窗体应用程序。我想更改通过 USB 连接到 PC 的 Android 设备移动数据。

如何使用 Xamarin 在 Windows 窗体应用程序中更改 Android 设备移动数据的状态。

有什么方法可以改变移动数据的状态吗?

最佳答案

应该这样做:

void SetMobileDataEnabled(bool enabled)
{
    if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.L) {
        Console.WriteLine ("Device does not support mobile data toggling.");
        return;
    }

    try {
        if (Build.VERSION.SdkInt <= Android.OS.BuildVersionCodes.KitkatWatch 
            && Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Gingerbread) {
            Android.Net.ConnectivityManager conman = (Android.Net.ConnectivityManager)GetSystemService (ConnectivityService);
            Java.Lang.Class conmanClass = Java.Lang.Class.ForName (conman.Class.Name);
            Java.Lang.Reflect.Field iConnectivityManagerField = conmanClass.GetDeclaredField ("mService");
            iConnectivityManagerField.Accessible = true;
            Java.Lang.Object iConnectivityManager = iConnectivityManagerField.Get (conman);
            Java.Lang.Class iConnectivityManagerClass = Java.Lang.Class.ForName (iConnectivityManager.Class.Name);
            Java.Lang.Reflect.Method setMobileDataEnabledMethod = iConnectivityManagerClass.GetDeclaredMethod ("setMobileDataEnabled", Java.Lang.Boolean.Type);
            setMobileDataEnabledMethod.Accessible = true;

            setMobileDataEnabledMethod.Invoke (iConnectivityManager, enabled);
        }

        if (Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Gingerbread) {

            TelephonyManager tm = (TelephonyManager)GetSystemService (Context.TelephonyService);

            Java.Lang.Class telephonyClass = Java.Lang.Class.ForName (tm.Class.Name);
            Java.Lang.Reflect.Method getITelephonyMethod = telephonyClass.GetDeclaredMethod ("getITelephony");
            getITelephonyMethod.Accessible = true;

            Java.Lang.Object stub = getITelephonyMethod.Invoke (tm);
            Java.Lang.Class ITelephonyClass = Java.Lang.Class.ForName (stub.Class.Name);

            Java.Lang.Reflect.Method dataConnSwitchMethod = null;
            if (enabled) {
                dataConnSwitchMethod = ITelephonyClass
                    .GetDeclaredMethod ("disableDataConnectivity");
            } else {
                dataConnSwitchMethod = ITelephonyClass
                    .GetDeclaredMethod ("enableDataConnectivity");   
            }

            dataConnSwitchMethod.Accessible = true;
            dataConnSwitchMethod.Invoke (stub);
        } 
    } catch (Exception ex) {
        Console.WriteLine ("Device does not support mobile data toggling.");
    }
}

在 list 中启用 ChangeNetworkStateModifyPhoneState 权限。

Android L 目前没有可用的方法来禁用/启用移动数据。

关于c# - 使用 Xamarin.Android 在 C# Windows 窗体应用程序中打开/关闭 Android 设备移动数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800072/

相关文章:

c# - 在 Linux (Ubuntu) 上从 C# (Mono) 使用 GnuPG

按 Home 键后运行的 Android 服务

Xamarin 表单选项卡式分页滑动调用事件

c# - System.Drawing.Color 与 TypeNameHandling 的 JSON.NET 序列化

c# - DevExpress过滤器编辑器: DropdownList

c# - 我可以在初始化后将变量设置为初始化样式吗? C#

ios - Xamarin NetworkReachability 错误地报告可达性

android - Unity Google Play Services Plugin API 与 Show Leaderboard UI 功能不同步?

android - 错误 : A factory has already been set on this LayoutInflater (change background color of menu options)

android - 更新到 Xamarin.Forms 2 后生成错误