安卓NFC如何重新启动应用程序

3
我使用NFC从设备1上的应用发送文本记录到设备2上的应用。当设备接触时,两个设备都会弹出“触摸以传输”UI。如果我在设备1上触摸并传输消息(发送部分),则消息将被发送,一切正常。但是,如果我在设备2上触摸“触摸以传输”UI(接收部分)-则设备1上的应用程序将重新加载。Logcat没有显示任何错误。似乎在这种情况下,应用程序会收到某种空的NFC消息?但为什么它什么也不做?为什么要重新加载?我使用ForegroundDispatch,在代码中动态创建“text / plain”过滤器,而不使用清单文件。
如何处理用户按下“触摸以传输”UI的错误侧面的情况?
1个回答

0

如果您没有在应用程序中设置Android Beam,则在传输时,Android的默认行为是指示其他设备打开相同的应用程序(过滤MAIN / LAUNCHER意图的第一个活动,并且该应用程序与源设备上的应用程序具有相同的包名称),或者如果您的应用程序未安装,则打开Play商店列表。这是通过发送AAR(+ Play商店链接?)来完成的。

因此,在您的情况下,单击设备2上的Beam UI会导致将AAR发送到设备1。结果,您的应用程序将在设备1上重新打开。为了克服这个问题,您可以执行以下操作:

  1. 为设备1上的活动启用前台调度,以便接收到的NDEF消息立即由您的应用程序处理。但我不确定这是否会与Beam UI发生冲突。
  2. 使用Beam API更改由设备2发送的NDEF消息,使其不包含AAR。

我发现了一个新的“有趣”的事情...在我的应用清单中没有NFC消息的任何活动过滤器...但是,仍然可以从我的应用程序的任何活动(与NFC绝对没有任何共同之处)上进行beam,在两个设备上 - 应用程序中的一个会强制重新加载另一个...这意味着,即使根本没有定义NFC消息,应用程序仍会在beam上发送AAR消息?如何“设置Android Beam”以避免这种情况? - user3337390
每个没有显式为Beam注册NDEF消息的活动都会自动具有默认的NDEF消息,其中包含Play Store URL和AAR,当点击Beam UI时发送。如果没有过滤NFC意图的活动或没有过滤接收到的NDEF消息的第一个NDEF记录的活动,则AAR将触发具有MAIN/LAUNCHER意图过滤器的应用程序的第一个活动。 - Michael Roland
请看我的答案,了解如何避免这种情况。 - Michael Roland
是的,谢谢,现在我只是制作假的NFC消息,并读取它,如果错误的按键被按下,则会出现。这不是很好的方法,但现在还可以。 - user3337390

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接