所以,我的空投功能正常工作,但是如果用户按下接受并且用户按空中请求拒绝,我需要发生不同的事情。
目前,无论用户是接受还是拒绝空投请求,都会发生相同的动作。
我正在使用
private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error)
有这个签名:
<ion-tabs>
<ion-tab [root]="tab1Root" [tabTitle]="tab1Title"></ion-tab>
<ion-tab [root]="tab2Root" [tabTitle]="tab2Title"></ion-tab>
</ion-tabs>
问题在于我无法使用这些参数。如果用户做出任一选择并且returnedItems为null,则Completed始终返回true。
我可以使用或做什么来检测用户是否拒绝了Airdrop请求?
这适用于Xamarin.iOS应用,但Swift /原生iOS的答案也很好。
类似的问题没有答案: UIActivityViewController Airdrop - Check the status when 'sent' or 'declined'
答案 0 :(得分:3)
我在iOS 10.3.3上尝试过,实际上这种方法的行为没有区别,无论Airdrop是否被其他设备接受或拒绝了。
显然,completed
中的HandleActivityViewControllerCompletion
布尔值到目前为止意味着:
“数据被赋予选定的活动”或“数据未被提供给任何活动”。它对应于共享表下方的按钮是“完成”还是“取消”。不幸的是,空投活动将此按钮设置为Done,即使在跌落时也是如此,这种情况很有意义,因为它“做了些什么”。
我认为问题(设计明智的)在于,通常,活动(例如,自定义活动)在调用UIActivityViewController
时会忽略整个activityDidFinish(_:)
。 AidropActivity显然是特别的,它似乎根本不会那么做,它只是在连接通过时在其图标下方显示“Declined”指示符,但另一方面,下降。另外,它会更改工作表的按钮。
此外,整个操作是异步的。对我来说,看起来Airdrop活动调用它的perform()
或prepare(withActivityItems:)
函数,异步启动一个远程连接,并在运行时立即将按钮设置为“完成”(我甚至看不到一种方法其他活动,但我没有尝试)。你甚至可以在对方接受或拒绝之前按下完成,这不会中止转移。活动甚至会收到通知(如果工作表尚未以“完成”关闭)以更新其图标。
总而言之,它似乎具有特殊权限,这是有道理的,因为整个Airdrop功能是特殊的:它在后台运行。活动只是传递数据,一旦完成,它本身也会完成(无论结果如何)。
当然我同意这是不够的,但我改变这个可能需要Apple更改API。所以这对你来说是一个功能请求,我强烈怀疑有一个(AppStore符合)的解决方法,我没有想到......