如何在Android中使用NFC(Android Beam)接收文件

use*_*939 6 android nfc intentfilter android-beam nfc-p2p

根据Android开发者网站上的教程,我能够使用NFC发送文件.但是我无法处理接收器部分.

我按照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>
Run Code Online (Sandbox Code Playgroud)

但即使文件传输完成,我的接收活动也永远不会被调用.如何在我的应用程序中收到该文件?

Mic*_*and 0

从另一台设备接收文件

ACTION_VIEW注意:对于 Android Beam 文件传输,如果第一个传入文件的 MIME 类型为“audio/*”、“image/*”或“video/*”,则您会在 Intent 中收到内容 URI ,表明该文件是媒体相关。

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

  • 意图操作 VIEWMIME 类型“image/*”以及带有方案“file:”的 URI,或者
  • 意图操作 VIEWMIME 类型“video/*”以及带有方案“file:”的 URI。

因此它必须与数据元素中给出的任何 MIME 类型任何 URI 相匹配。

因此,您的 Intent 过滤器永远无法匹配,因为“image/*”MIME 类型和“video/*”MIME 类型将生成内容 URI,而不是“file:”URI。因此,跳过 URI 过滤器部分或将过滤后的方案更改为“内容”应该可以解决问题。

<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>
Run Code Online (Sandbox Code Playgroud)

或者

<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>
Run Code Online (Sandbox Code Playgroud)