如何打开移动数据以编程方式从xamarin.android mono中的弹出窗口开启?

时间:2017-06-23 07:04:48

标签: android xamarin xamarin.android

我正在尝试从我的应用程序中的弹出窗口打开移动数据或wifi,但无法打开移动数据。我通过使用以下代码尝试这个...

public void TurnOnInternet()
   {
     AlertDialog.Builder alert = new AlertDialog.Builder(_context);
         alert.SetTitle(Resource.String.networktitle);
        alert.SetMessage("Select the etwork you Like to Enable from the following");
      alert.SetPositiveButton("Enable Wifi", (senderAlert, args) =>
           {
             Intent tntent = new Intent(Android.Provider.Settings.ActionSettings);
                _context.StartActivity(tntent);
              _context.Finish();
              WifiManager wifi = (WifiManager)GetSystemService(Context.WifiService);
               wifi.SetWifiEnabled(true);

               _context.Finish();
            });
           alert.SetNegativeButton("Enable Mobile Date", (senderAlert, args) =>
          {
       setMobileDataState();
       try
        {
          TelephonyManager telephonyService = (TelephonyManager)GetSystemService(Context.TelephonyService);
           Method setMobileDataEnabledMethod = telephonyService.Class.GetDeclaredMethod("getDataEnabled");
           if (null != setMobileDataEnabledMethod)
           {
            setMobileDataEnabledMethod.Invoke(telephonyService, true);
                      setMobileDataEnabledMethod.  .SetDataEnabled(true);
                    }
                _context.Finish();
               }
               catch (Exception ex)
                { }
            });

            Dialog dialog = alert.Create();
            dialog.Show();
        }
public void setMobileDataState()
        {
            try
            {
                Class  ITelephonyClass;
                TelephonyManager telephonyService = (TelephonyManager)GetSystemService(Context.TelephonyService);
                Method setMobileDataEnabledMethod = telephonyService.Class.GetDeclaredMethod("getDataEnabled");
                ITelephonyStub = setMobileDataEnabledMethod.Invoke(telephonyService);
                ITelephonyClass = Class.ForName(ITelephonyStub.Class.Name);

                if (null != setMobileDataEnabledMethod)
                {
                    Method dataConnSwitchmethod = ITelephonyClass.GetDeclaredMethod("enableDataConnectivity");

                    setMobileDataEnabledMethod.Invoke(telephonyService, true);
                 setMobileDataEnabledMethod.  .SetDataEnabled(true);
                    telephonyService.SetDataEnabled(true);
                    setMobileDataEnabledMethod.SetDataState(true);
                }
                _context.Finish();
            }
            catch (Java.Lang.Exception ex)
            { }

        }

所以这是我使用的代码但无法完成工作。移动数据部分完全无法正常工作,请帮助我从我的应用中打开移动数据,而无需导航到设置

如果你也知道android也请让我知道解决方案,以便我可以转换代码

1 个答案:

答案 0 :(得分:0)

  

我正在尝试从我的应用程序中的弹出窗口打开移动数据或wifi,但无法打开移动数据。

我认为移动数据和wifi是不同的东西。对于设置Wifi状态,它很简单,你可以像这样编码:

public void TurnOnInternet(bool enabled)
{
    var wm = this.GetSystemService(Context.WifiService) as WifiManager;
    if (enabled)
    {
        if (!wm.IsWifiEnabled)
            wm.SetWifiEnabled(true);
    }
    else
    {
        if (wm.IsWifiEnabled)
            wm.SetWifiEnabled(false);
    }
}

对于此操作,您需要在清单中获得以下权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

对于移动数据,首先,启用/禁用移动网络只能通过root访问权限完成,请确保您的设备支持它。然后,从Android 5.0版开始,您可以查看答案here,对于其他版本,您可以按照answer进行操作。

您可能需要的这项工作的权限如下:

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />

因为我没有带电话进行测试,虽然我创建了一个演示,但我不确定它是否有效,所以我不会在这里发布相关代码。