在我的应用中单击按钮时打开手机设置

Posted

技术标签:

【中文标题】在我的应用中单击按钮时打开手机设置【英文标题】:Open phone settings when button is clicked in my app 【发布时间】:2017-02-01 06:03:00 【问题描述】:

我最近升级到 Xcode 8 并将我的代码转换为 Swift 3。我正在制作一个自定义键盘(扩展),在 ios 9 之前它工作得非常好,但我在 iOS 10 中遇到了几个问题。

    自定义键盘的容器应用包含一个按钮,可将用户引导至键盘设置以添加键盘

问题:此按钮单击在 iOS 10 中不起作用,即用户未定向到设置。我已经在我的项目中配置了 URL 方案并尝试了以下代码:

@IBAction func btnGetStarted(_ sender: AnyObject) 

    let settingsUrl = URL(string: UIApplicationOpenSettingsURLString)
    if let url = settingsUrl 
        UIApplication.shared.openURL(url)
    

也试过了:

@IBAction func btnGetStarted(_ sender: AnyObject) 

if let settingsURL = URL(string:"prefs:root=General&path=Keyboard/KEYBOARDS") 
 UIApplication.shared.openURL(settingsURL)
 

    自定义键盘还包含表情符号图像。用户需要在设置中启用“允许访问”才能使用表情符号图像。如果用户未启用“允许访问”,则他无法使用表情符号图像。如果未启用“允许访问”并且用户尝试单击表情符号,则会弹出一个 toast,告诉用户转到设置并启用“允许访问”。

问题:在 iOS 10 中运行应用时不会弹出此 toast

吐司代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

    let pbWrapped: UIPasteboard? = UIPasteboard.general

    if let pb = pbWrapped 
        if  currentKeyboard == XXXXXX.emoji 
            if let data = UIImagePNGRepresentation(dataEmoji[(indexPath as NSIndexPath).row]) 
                pb.setData(data, forPasteboardType: "public.png")

                  self.makeToast(pasteMessage, duration: 3.0, position: .center)
            
        

     else 
        var style = ToastStyle()
        style.messageColor = UIColor.red
        style.messageAlignment = .center
        //style.backgroundColor = UIColor.whiteColor()

        self.makeToast("To really enjoy the keyboard, please Allow Full Access in the settings application.", duration: 8.0, position: .center, title: nil, image: UIImage(named: "toast.png"), style: style, completion: nil)
    

我确实在 *** 上查看了一些解决方案,但没有一个对我有用,正如我之前所说,我的应用程序在除 iOS 10 之外的所有版本上都能正常运行。 请问有人可以帮我吗?

【问题讨论】:

***.com/questions/28152526/… @Rock 正如我上面所写的,我已经尝试过了,对我有用 @PersianBlue:你有答案了吗,我也面临同样的问题。 @Raj_216 不,我还没有找到解决方案.. @PersianBlue:好的,一旦我得到它,我会发布解决方案,如果你在我之前找到它,那么请做同样的事情。 【参考方案1】:

Swift 3 iOS 10

let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

【讨论】:

我也试过这个,但它只是将我引导到一个空白屏幕 您好像忘记了在 didFinishLaunchingWithOptions 中请求用户权限。检查一下 我在设置中添加了 URL 类型如下 - ***.com/a/35542855/6077720。那么在didFinishLaunchingWithOptions中需要什么用户权限 因为是swift 3,我相信你应该做URL(string:UIApplicationOpenSettingsURLString)!而不是做NSURL -> URL case【参考方案2】:

@persianBlue:这适用于 Xcode8 + iOS10。

UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)

【讨论】:

我已经试过了。这会将应用程序定向到手机设置应用程序,但它只是一个白屏,并且在显示设置选项之前应用程序关闭 看起来有些人没有受到崩溃的影响。从更新到 iOS 10 那天起,我就面临同样的崩溃。即使更新到 iOS 10.0.2 也无法解决。 崩溃日志在这里仅供参考:pastebin.com/L9zQ7kmZ。希望有人能够提取实际发生的事情。 openURL(url: URL) 在 Swift 3 中已弃用。您需要使用 open(url:, options, completionHandler:) @PeterJohnson 它在 iOS 10 中已被弃用,但如果您的目标是低于 iOS 10 的版本,则需要继续使用 openUrl【参考方案3】:

UIApplicationOpenSettingsURLString 提供指向应用设置的链接。在 iOS10 之前,如果应用缺少 settings.Bundle,它将链接到设置主页。日志将显示:

_BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15)

如果您的意图是链接到应用程序的设置,您只需添加一个设置包。 Apple Documentation

我还没有找到链接到手机设置主页的方法。

【讨论】:

您找到链接手机设置的方法了吗?【参考方案4】:

这在 iOS11 中是不可能的了,我们可以像这样打开设置:

if let url = URL(string:UIApplicationOpenSettingsURLString), UIApplication.shared.canOpenURL(url) 
   //iOS 10 +
   UIApplication.shared.open(url, options: [:], completionHandler: didOpen in
      print("Opened \(didOpen)") 
   )
   //iOS 9 +
   UIApplication.shared.open(url)

【讨论】:

【参考方案5】:

如果您看到像 @PersianBlue 一样的白屏,您的应用可能缺少自定义设置。 以下是文档对UIApplicationOpenSettingsURLString 的评价:

用于创建可以传递给 openURL(_:) 方法的 URL。什么时候 打开从该字符串构建的 URL,系统将启动 设置应用并显示应用的自定义设置(如果有)。

【讨论】:

【参考方案6】:

我写了下面的函数,它对我有用。我帮助它会帮助你们。

func openLocationSettings() let scheme:String = UIApplicationOpenSettingsURLString if let url = URL(string: scheme) if #available(iOS 10, *) UIApplication.shared.open(url, options: [:], completionHandler: (success) in print("Open \(scheme): \(success)") ) else let success = UIApplication.shared.openURL(url) print("Open \(scheme): \(success)")

【讨论】:

以上是关于在我的应用中单击按钮时打开手机设置的主要内容,如果未能解决你的问题,请参考以下文章

单击通用链接在我的应用程序中打开 WKWebView

Twitter登录未在我的ios应用程序中打开登录窗口

当我在我的应用程序中按下按钮时,我如何能够打开谷歌地图?

如何在主片段中单击按钮时打开导航抽屉?

当单击图像上的“按钮”时,Drupal 7 在颜色框中打开图像,否则转到内容

为啥网站下载的vpn文件苹果手机打不开