如何在安卓系统中使用NFC(Android Beam)接收文件

6
我能够使用NFC发送文件,参考自Android开发者网站上的教程。然而,我无法处理接收端。
我按照http://developer.android.com/training/beam-files/receive-files.html的指导进行接收端操作,并且我收到了Beam文件传输成功的通知。当用户点击此通知时,我期望我的应用程序应该被启动。
我的接收活动具有以下意图过滤器:
<intent-filter>
 <action android:name="android.intent.action.VIEW"/>
 <category android:name="android.intent.category.DEFAULT"/>
 <data android:mimeType="image/*" />
 <data android:mimeType="video/*" />
 <data android:scheme="file" />
</intent-filter>

但是,即使文件传输完成,我的接收活动也从未被调用。我该如何在我的应用程序中接收文件?

你为什么认为你的活动应该开始?意图中没有任何来自NFC的东西。 - greenapps
当用户点击传输成功的通知时,我的应用程序应该启动。这是我正在尝试做的事情。http://developer.android.com/training/beam-files/receive-files.html - user3847939
1个回答

0

来自从另一设备接收文件:

注意:对于Android Beam文件传输,如果第一个传入的文件具有“audio / *”,“image / *”或“video / *” MIME类型(表示该文件与媒体相关),则在ACTION_VIEW意图中您将接收到内容URI。

由于<data ... />过滤器的处理方式(请参见数据测试数据元素),因此您的意图过滤器转换为

  • 意图操作VIEW 并且 MIME类型为“image / *” 并且 具有“file:”方案的URI,或者
  • 意图操作VIEW 并且 MIME类型为“video / *” 并且 具有“file:”方案的URI。

因此,它必须匹配数据元素中给定的任何 MIME 类型 URI 中的任何一个。

因此,您的意图过滤器永远无法匹配,因为“image/*”MIME 类型和“video/*”MIME 类型都将导致内容 URI 而不是“file:”URI。因此,要么跳过 URI 过滤器部分,要么将过滤方案更改为“content”即可解决问题。

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="image/*" />
    <data android:mimeType="video/*" />
</intent-filter>

或者

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="image/*" />
    <data android:mimeType="video/*" />
    <data android:scheme="content" />
</intent-filter>

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