M. *_*cik 4 bluetooth ios swift programmatically
标题是,问题是如何从我的应用程序以编程方式打开蓝牙设置?我检查了stackoverflow上的所有答案,甚至没有一个在iOS 11中工作正常.所有这些都是旧的答案是低于11或没有答案.我所能做的只是带我进入常规设置或应用程序设置,但我希望用户可以直接进入蓝牙设置,这样他就可以打开它.
let alert = UIAlertController(title: "Bluetooth is off", message: "Please turn on your bluetooth", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Go to settings", style: UIAlertActionStyle.default, handler: { (action) in
switch action.style {
case .default:
let url = URL(string: "App-Prefs:root=Bluetooth") //for bluetooth setting
let app = UIApplication.shared
app.openURL(url!)
print("default")
case .cancel:
print("cancel")
case .destructive:
print("destrucive")
}
Run Code Online (Sandbox Code Playgroud)
我尝试了更多,也没有结果:
UIApplication.shared.openURL(NSURL(string: "prefs:root=General&path=Bluetoth")! as URL)
Run Code Online (Sandbox Code Playgroud)
要么:
let url = URL(string: "App-Prefs:root=Bluetooth")
Run Code Online (Sandbox Code Playgroud)
以上都不起作用
M. *_*cik 12
经过一些深入的研究(我无法相信这是不可能的)并尝试失败,我可以为我的问题写一个简短的答案(摘要).正如@maddy所写,iOS不支持URL方案来启动任何直接设置,仅支持常规设置(所有设置列表),或支持应用程序设置(您的应用程序设置(您可以实现)/权限列表).不幸的是,对于您的应用程序设置,您无法添加任何iOS系统设置,以便在那里轻松访问.较差的..
要转到常规设置,您可以使用:
let url = URL(string: "App-Prefs:root=General")
Run Code Online (Sandbox Code Playgroud)
要转到YouApp设置,您可以使用:
let url = URL(string: UIApplicationOpenSettingsURLString)
Run Code Online (Sandbox Code Playgroud)
当然记得打开那个URL :(是的,我知道你可以在一行中完成所有这些)
let app = UIApplication.shared
app.openURL(url!)
Run Code Online (Sandbox Code Playgroud)
另外,正如@ Paulw11所提到的,您可以通过CBCentralManagerShowPowerAlertKey选项直接打开蓝牙设置.因此,当您打开您的应用程序并实例化CBCentralManager时,将弹出内置警报对话框,告诉您需要"打开蓝牙以使用您的应用程序使用附件(外围设备)",使用2个按钮:设置(直接指向您的蓝牙)设置)和确定(关闭对话框).不幸的是,这会在实例化中央管理器时出现,所以如果你想为你的整个应用程序(如单身等)保留中央管理器而不是你想要的那么好,那么它只会弹出一次.在其他情况下可能是它..
现在!ios蓝牙有一些问题.在iOS中,您可以通过2种方式打开/关闭蓝牙:一种来自设置 - >蓝牙,第二种方式是从下往上滑动并选择蓝牙图标.但.现在,当您通过第二种方式执行此操作时,"设置"中的蓝牙仍会打开!因此,即使您打开应用程序并弹出蓝牙警报对话框,并选择转到设置,您也会看到蓝牙已打开.
这在iOS上真的很奇怪..
因此,简而言之,我的问题的答案是:
您无法通过自己的AlertDialog以编程方式打开蓝牙设置.您可以使用内置的iOS CBCentralManager AlertDialog.
希望我节省了你的一些时间.
打开URL对于iOS 10+(当我在项目中更改版本时,我必须更改它):
app.open(url!, options: [:], completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
蓝牙奇怪的行为 - 更新
如上所述,您可以通过两种方式打开/关闭蓝牙,这会导致奇怪的行为.现在我应该让自己变得更好:这对我来说是一种奇怪的行为(我之前习惯过Android).现在我知道为什么这种行为是这样的.这是因为,通过我描述的第二种方式(从顶部向下滑动并按下蓝牙图标)转动蓝牙的方式TURNS OFF NOT BLUTETOOTH CONNECTION,但它关闭允许连接(蓝牙仍然打开,但无法与设备连接(在应用程序中被视为蓝牙将被关闭!!).但仍然无法以编程方式管理它.我仍然认为它应该由苹果改进.
警告
正如@ user3620372所写,使用prefs网址会导致应用拒绝:
您的应用使用"prefs:root ="非公共URL方案,这是一个私有实体.App Store上不允许使用非公共API,因为如果这些API发生变化,可能会导致糟糕的用户体验.
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |