【问题标题】:Is there a way to detect if user presses accept or deny for Airdrop request?有没有办法检测用户是否按接受或拒绝 Airdrop 请求?
【发布时间】:2018-01-10 10:51:32
【问题描述】:

所以,我可以使用空投功能,但是如果用户按下接受并且用户按下拒绝空投请求,我需要发生不同的事情。

目前,无论用户接受还是拒绝空投请求,都会发生相同的操作。

我正在使用

activityViewController.SetCompletionHandler(HandleActivityViewControllerCompletion);

有这个签名:

private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error)

问题是我无法使用这些参数。如果用户做出任何选择并且返回的项目为空,则 Completed 始终返回 true。

我可以使用或做什么来检测用户是否拒绝了 Airdrop 请求?

这适用于 Xamarin.iOS 应用,但 Swift/本机 iOS 中的答案也很好。

没有答案的类似 SO 问题: UIActivityViewController Airdrop - Check the status when 'sent' or 'declined'

【问题讨论】:

  • 什么意思,哪个用户拒绝或接受?使用 Airdrop,您通常只需点击目的地,没有进一步的接受或取消按钮,对吧?还是取决于某些因素?接受或拒绝的人将是另一个用户,其设备是丢弃的目标。还是您的意思是取消请求,就像在点击空投目标之前/不点击之前关闭活动对话框一样?
  • 我的问题和这里的这个问题完全一样,也没有答案:stackoverflow.com/questions/23495399/…

标签: c# ios xamarin xamarin.ios airdrop


【解决方案1】:

嗯,好吧,看来水晶球是免不了回答这个问题的。

我在 iOS 10.3.3 上试用过,无论 Airdrop 是被其他设备接受还是被拒绝,这种方法的行为确实没有区别。

显然,到目前为止,HandleActivityViewControllerCompletion 中的 completed 布尔值意味着: “数据已提供给选定的活动”或“数据未提供给任何活动”。它对应于共享表下方的按钮是“完成”还是“取消”。不幸的是,即使空投被拒绝,空投活动也会将此按钮设置为“完成”,这是有道理的,因为它“做了一些事情”。

我认为问题(设计方面)在于,通常情况下,活动(例如自定义活动)在调用 activityDidFinish(_:) 时会忽略整个 UIActivityViewController。 AidropActivity 显然很特别,它似乎根本没有这样做,它只是在连接通过时在其图标下方显示一个“已拒绝”指示符,但另一边,嗯,拒绝了。此外,它还会更改工作表的按钮。

此外,整个操作是异步的。在我看来,Airdrop 活动调用了它的perform()prepare(withActivityItems:) 函数,异步启动远程连接并在运行时立即将按钮设置为“完成”(我什至看不到其他活动的方法)这样做,但我没有尝试)。您甚至可以在对方接受或拒绝之前按完成,这不会中止传输。 Activity 甚至会收到通知(如果工作表尚未以“完成”关闭)以更新其图标。

总而言之,它似乎具有特殊权限,这是有道理的,因为整个 Airdrop 功能很特殊:它在后台运行。活动只是将数据传递给它,一旦完成,它本身也会完成(无论结果如何)。

我当然同意这是不够的,但我改变它可能需要 Apple 改变 API。所以这对你来说是一个功能请求,我强烈怀疑有一个我没有想到的(AppStore 一致)解决方法......

【讨论】:

  • 感谢您的确认 :)
猜你喜欢
  • 2020-01-07
  • 2011-03-24
  • 2011-10-08
  • 1970-01-01
  • 2011-08-30
  • 2018-11-11
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多