Eur*_*e01 9 c# xamarin.ios ios xamarin airdrop
所以,我有空投功能,但如果用户按下接受并且用户按空中请求拒绝,我需要发生不同的事情.
目前,无论用户是接受还是拒绝空投请求,都会发生相同的动作.
我正在使用
activityViewController.SetCompletionHandler(HandleActivityViewControllerCompletion);
Run Code Online (Sandbox Code Playgroud)
有这个签名:
private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error)
Run Code Online (Sandbox Code Playgroud)
问题是我无法使用这些参数.如果用户做出任一选择并且returnedItems为null,则Completed始终返回true.
我可以使用或做什么来检测用户是否拒绝了Airdrop请求?
这是一个Xamarin.iOS应用程序,但Swift /原生iOS的答案也很好.
类似的SO问题没有答案: UIActivityViewController Airdrop - 检查'发送'或'拒绝'时的状态
嗯,好吧,看起来要回答这个问题就不可避免地需要看一下水晶球。
我在 iOS 10.3.3 上尝试过,无论 Airdrop 是否被其他设备接受或拒绝,这种方法的行为确实没有差异。
显然,completed
到目前为止的布尔值HandleActivityViewControllerCompletion
意味着:“数据已提供给选定的活动”或“数据未提供给任何活动”。它对应于共享表下方的按钮是否显示“完成”或“取消”。不幸的是,即使空投被拒绝,空投活动也会将此按钮设置为“完成”,这也是有道理的,因为它“做了一些事情”。
我认为问题(设计方面)在于这样一个事实:通常,活动(例如自定义活动)在UIActivityViewController
调用activityDidFinish(_:)
. AidropActivity 显然很特别,因为它似乎根本没有这样做,它只是在连接通过但另一端拒绝时在其图标下方显示“拒绝”指示器。另外它还改变了工作表的按钮。
此外,整个操作是异步的。在我看来,Airdrop 活动调用其perform()
或prepare(withActivityItems:)
函数,异步启动远程连接,并在运行时立即将按钮设置为“完成”(我什至没有看到其他活动可以执行此操作的方法,但我没有不要尝试)。您甚至可以在对方接受或拒绝之前按“完成”,这不会中止传输。活动甚至会收到更新其图标的通知(如果工作表尚未以“完成”关闭)。
总而言之,它似乎具有特殊的特权,这是有道理的,因为整个空投功能都很特殊:它在后台运行。该活动只是传递数据,一旦完成,它本身也完成了(无论结果如何)。
当然我同意这还不够,但我改变这一点可能需要苹果改变API。所以这对你来说是一个功能请求,我强烈怀疑是否有一个我没有想到的(AppStore 一致)解决方法......
归档时间: |
|
查看次数: |
326 次 |
最近记录: |