如何在 MFMessageComposeViewController 中启用相机?
Posted
技术标签:
【中文标题】如何在 MFMessageComposeViewController 中启用相机?【英文标题】:How to enable camera in MFMessageComposeViewController? 【发布时间】:2017-08-22 17:21:24 【问题描述】:我正在开发一个带有按钮的 ios 应用程序,用于使用 SMS/iMessage 报告问题。我正在使用 MFMessageComposeViewController 使用以下代码(Swift 3)呈现消息组合界面:
if(MFMessageComposeViewController.canSendText())
let controller = MFMessageComposeViewController()
controller.messageComposeDelegate = self
controller.body = "Example Message"
controller.recipients = ["2345678901"]
self.present(controller, animated: true, completion: nil)
我还实现了 MFMessageComposeViewControllerDelegate 函数以正确关闭。标准短信/iMessage 发送成功,但用户没有附加图像的选项。相机、iMessage 应用程序等按钮在那里,但它们被禁用且无法按下。如何启用这些按钮(特别是相机)以允许我的用户将图像附加到使用应用程序编写的消息中?
有问题的按钮:
编辑:
感谢 Abdelahad 的建议。我修改了他的回复以允许多个收件人并包含消息正文。我还对其进行了更新以删除已弃用的 addingPercentEscapes(using: )
方法。
这是一个使用 url 打开消息应用程序的解决方案。注意:这会使用户退出应用程序。
let recipients = "2345678901,3456789012" //Phone Numbers
let messageBody = "This is a test"
let sms: String = "sms://open?addresses=\(recipients)&body=\(messageBody)"
let smsEncoded = sms.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)
let url = URL(string: smsEncoded!)
UIApplication.shared.openURL(url!)
但我仍然想要一个不会让用户退出应用程序的解决方案。这可能吗?为什么 MFMessageComposeViewController 会显示按钮而不启用它们?
【问题讨论】:
你有想过这个吗?我现在遇到了同样的问题 不,我没有。这似乎是 MFMessageComposeViewControllerDelegate 中的一个错误 这绝对是一个错误,面临同样的问题。目前唯一合适的解决方案是使用 url。 2020年了,我觉得这个问题还是存在的。我一直在寻找解决方案,到目前为止,我一无所获。我的理解是相机按钮一直工作到 iOS 10 之后才停止。我们现在升级到 iOS13 并且不工作的按钮仍然存在。 【参考方案1】:不要使用 MFMessageComposeViewController 使用 UIApplication.shared.openURL(url!) 但这会将用户带出应用程序
var phoneToCall: String = "sms: +201016588557"
var phoneToCallEncoded = phoneToCall.addingPercentEscapes(using: String.Encoding.ascii)
var url = URL(string: phoneToCallEncoded)
UIApplication.shared.openURL(url!)
【讨论】:
感谢您的回复!将用户带入消息应用程序确实启用了相机,但我正在寻找一种不会将用户带出应用程序的解决方案。我还需要能够预先填写消息文本。有没有办法用描述的方法做到这一点? 你可以附上图片,或者你需要有相机工作 好的,这个解决方案部分有效:let phoneToCall: String = "sms://open?addresses=\(recipients)&body=\(text)" let phoneToCallEncoded = phoneToCall.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) let url = URL(string: phoneToCallEncoded!) UIApplication.shared.openURL(url!)
但它仍然将用户带出应用程序,这是不可取的。
是的,我检查了它并编辑了我的答案,这将把用户带到应用程序之外以上是关于如何在 MFMessageComposeViewController 中启用相机?的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?