因此,我有空投功能工作,但我需要发生不同的事情,如果用户按接受和如果用户按拒绝空投请求。
目前,无论用户接受还是拒绝空投请求,都会发生相同的操作。
我在用
activityViewController.SetCompletionHandler(HandleActivityViewControllerCompletion);它有这样的签名:
private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error)问题是我不能使用这些参数。如果用户做出选择,且returnedItems为null,则Completed始终返回true。
如果用户拒绝Airdrop请求,我可以使用或做什么来检测?
这是一个Xamarin.iOS应用程序,但是使用Swift/原生iOS的答案也很好。
类似的问题,没有答案:UIActivityViewController Airdrop - Check the status when 'sent' or 'declined'
发布于 2017-08-08 15:11:07
嗯,好吧,看上去这个水晶球是不可避免的回答。
我在iOS 10.3.3上试用了它,实际上这种方法的行为并没有区别,不管空投是被另一个设备接受还是拒绝了。
显然,到目前为止,completed布尔值在HandleActivityViewControllerCompletion中的意思是:“数据是给选定的活动的”,或者“数据没有给任何活动”。它对应于股票表下面的按钮是表示“已完成”还是“取消”。不幸的是,空投活动设置了这个按钮,即使下降被拒绝,这是有意义的,因为它“做了一些事情”。
我认为问题(设计方面)在于,通常情况下,在调用UIActivityViewController时,活动(例如,自定义活动)会忽略整个activityDidFinish(_:)。AidropActivity显然是特别的,因为它似乎根本不这样做,当连接通过时,它只是在图标下面显示一个“下降”的指示符,但是另一面,嗯,下降。另外,它改变了工作表的按钮。
此外,整个操作是异步的。在我看来,Airdrop活动调用其perform()或prepare(withActivityItems:)函数,异步启动远程连接,并在运行时立即将按钮设置为“已完成”(我甚至没有看到其他活动可以这样做,但我没有尝试)。你甚至可以在对方接受或拒绝之前按下“完成”键,这样就不会中止传输。该活动甚至会收到通知(如果工作表尚未以“完成”结束)来更新其图标。
总之,它似乎有特权,这是有意义的,因为整个空投功能是特殊的:它在后台运行。活动只是传递数据,一旦完成,它本身也就完成了(不管结果如何)。
当然,我同意这是不够的,但我改变这一点可能需要苹果改变API。因此,这将是对您的特性要求,我强烈怀疑有一个(AppStore一致性)解决办法,我没有想到.
https://stackoverflow.com/questions/45473938
复制相似问题