2017-06-23 47 views
2

我正嘗試在應用程序中彈出移動數據或WiFi,但無法打開移動數據。我用下面的代碼嘗試此...如何打開移動數據從xamarin.android mono的彈出窗口以編程方式打開?

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也請讓我知道解決方案,以便我可以獲得代碼轉換

回答

0

我試圖在我的應用程序中彈出移動數據或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" /> 

因爲我沒有一個根深蒂固的手機進行測試,雖然我創建了一個演示,我不知道它的工作原理,所以我不會在這裏發佈相關的代碼。

相關問題