菜鸟教程小白 发表于 2022-12-13 10:51:46

c# - 如何在 ios 中以编程方式打开设置


                                            <p><p>我正在搜索 <a href="https://stackoverflow.com/questions/23824054/how-to-open-settings-programmatically-like-in-facebook-app" rel="noreferrer noopener nofollow">How to open settings programmatically</a> 的 Xamarin 实现</p>

<p> <a href="https://stackoverflow.com/users/2097806/vito-ziv" rel="noreferrer noopener nofollow">Vito-ziv</a>为客观 C 回答了这个问题 - 在 Xamarin Studio 中的 C# for iOS 中执行此操作的正确方法是什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>对于当前设备,这只能在 ios8 中实现(在撰写本文时 ios9 不可用)(显然,在 ios5 之前它曾经是可能的 - 参见 <a href="http://www.themethodology.net/2015/01/open-settings-app-programmatically-from.html" rel="noreferrer noopener nofollow">this blog post</a> 中的 <a href="https://plus.google.com/111410974594756564472" rel="noreferrer noopener nofollow">Adrian Stevens at Xamarin</a> - 向他大声喊出这个答案的灵感)</p>

<p>要在 ios8 中执行此操作,我是这样做的:</p>

<pre><code>var settingsString = UIKit.UIApplication.OpenSettingsUrlString;
            var url = new NSUrl (settingsString);
            UIApplication.SharedApplication.OpenUrl (url);
</code></pre>

<p>上面的代码是通过 UIAlertView 点击中的委托(delegate)类从点击事件中调用的。</p>

<p>因为我也支持 ios7,所以为了处理 ios7 设备,我这样做了,在决定是否呈现 ViewController 时调用 HandleLocationAuthorisation 方法 - ios8 及更高版本的用户可以选择直接进入设置,而ios7的用户必须手动去那里。</p>

<p>下面的这个例子是检查位置服务,但是可以很容易地改变一些小改动来检查其他类型的设置。</p>

<pre><code>public bool HandleLocationAuthorisation ()
{

    if (CLLocationManager.Status == CLAuthorizationStatus.AuthorizedAlways) {
      return true;
    } else {
      UIAlertView uiAlert;


      //iOS 8 and above can redirect to settings from within the app
      if (UIDevice.CurrentDevice.CheckSystemVersion(8,0)) {
            uiAlert = new UIAlertView
                (&#34;Location Services Required&#34;,
                  &#34;&#34;,
                  null,
                  &#34;Return To App&#34;,&#34;Open Settings&#34;);

            uiAlert.Delegate = new OpenSettingsFromUiAlertViewDelegate();
            uiAlert.Message = &#34;Authorisation to use your location is required to use this feature of the app.&#34;;

      //ios7 and below has to go there manually
      } else {
            uiAlert = new UIAlertView
                (&#34;Location Services Required&#34;,
                  &#34;Authorisation to use your location is required to use this feature of the app. To use this feature please go to the settings app and enable location services&#34;,
                  null,
                  &#34;Ok&#34;);
      }
      uiAlert.Show ();
      return false;
    }

}
</code></pre>

<p>为了完整起见,这里是上面引用的事件委托(delegate)的代码:</p>

<pre><code>public class OpenSettingsFromUiAlertViewDelegate : UIAlertViewDelegate {

public override void Clicked (UIAlertView alertview, nint buttonIndex)
{

    if (buttonIndex == 1) {
      var settingsString = UIKit.UIApplication.OpenSettingsUrlString;
      var url = new NSUrl (settingsString);
      UIApplication.SharedApplication.OpenUrl (url);
    }
}
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于c# - 如何在 ios 中以编程方式打开设置,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30439829/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30439829/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - 如何在 ios 中以编程方式打开设置