我想使用Android Beam将文本文件和图像文件从一个设备发送到另一个设备。
传输完成后,我希望接收设备启动可导入这两个文件的特定应用程序。
这就是我使用NDEF消息开始工作的方式:
private static final String NDEF_DOMAIN_NAME = "my.app.domain";
private static final String NDEF_TYPE_NAME = "mytypename";
NdefRecord cardRecord = NdefRecord.createExternal(
NDEF_DOMAIN_NAME,
NDEF_TYPE_NAME,
textfile.getBytes());
NdefRecord cardImageRecord = NdefRecord.createExternal(
NDEF_DOMAIN_NAME,
NDEF_TYPE_NAME,
base64EncodedImage.getBytes());
NdefMessage ndefMessage = new NdefMessage(new NdefRecord[] { cardRecord, cardImageRecord });
mNfcAdapter.setNdefPushMessage(ndefMessage, activity);
但是,对于整个图像来说,“纯”NFC的传输速度当然要慢得多。所以我必须使用带有2个文件URI的Android Beam:
Uri[] fileUris = new Uri[2];
fileUris[0] = pathToTextFile;
fileUris[1] = pathtoImageFile;
mNfcAdapter.setBeamPushUris(fileUris, activity);
转移工作完全正常,但接收设备在收到文件后不启动任何应用程序。我刚收到传输完成的通知。接收应用程序的清单现在看起来像这样:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
这样,当我点击“转移完成” - 通知时,我至少可以选择应用程序。但我想要的是这样的:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/my-own-mime-type" />
</intent-filter>
这样我的应用程序将是唯一能够处理此mime类型的应用程序。但我无法弄清楚如何在发送设备上设置mime-type。这是偶数还是如何通过Android Beam传输多个文件并打开1个特定应用程序来处理这些文件?
更新
我刚刚在这里阅读SO-question使用Android Beam无法使用自定义mime类型。似乎接收设备查看第一个文件及其文件结束,以决定将哪个mime类型用于ACTION_VIEW意图。 有谁知道是否可以压缩我的所有文件,然后使用自定义文件而不是* .zip?我可以这样创建一个假的mime类型吗?