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

时间:2015-06-17 07:12:34

标签: android nfc intentfilter nfc-p2p android-beam

我能够根据tutorials on the Android developer site使用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>

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

1 个答案:

答案 0 :(得分:0)

来自Receiving Files from Another Device

  

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

由于<data ... />过滤器的处理方式(请参阅Data TestData Element),您的意图过滤器会转换为

  • 意图行动视图 MIME类型“image / *”带有方案“file:”,
  • 的URI
  • 意图操作查看 MIME类型“video / *” URI,方案为“file:”。

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

因此,您的意图过滤器永远不会匹配,“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>

<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>