c# - 使用 Xamarin.Android 在 C# Windows 窗体应用程序中打开/关闭 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.");
}
}
在清单中启用ChangeNetworkState
和权限。ModifyPhoneState
Android L 目前没有可用的方法来禁用/启用移动数据。
推荐阅读
- python - `tf.svd` 在 GradientTape 期间失败
- c# - c#如何在表单之间交换
- ios - 将 UIImagePickerController cameraOverlayView 定位在相机预览的顶部
- power-automate - 更改数据输入的 Xpath
- unit-testing - junit中的自定义詹金斯步骤模拟不起作用
- ruby-on-rails - WickedPdf 中的数字签名
- css - 如何从 SVG 格式的 Google 登录按钮中删除蓝色轮廓和阴影
- css - 轮播指示器中的紫色圆点而不是蓝色线条 - primeng
- java - 验证 Jbehave 故事以确保存在步骤
- dataframe - 如何在pyspark中同时使用groupby和nth_value?