NFC NDEF MIME TYPE text / html

时间:2014-04-16 11:35:47

标签: android nfc ndef

我正在尝试在NFC标签上存储一个非常小的(1K)html文件。 当通过电话阅读时,它应该触发浏览器打开它。

可悲的是,我有这些限制:

  • HTML文件(1kb)存储在代码上。不只是网址。(用户没有互联网)
  • 不是text / plain,应该是text / html。
  • 应该由默认浏览器打开,而不是自定义的应用程序。

我用这种方式创建了标签:

      Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
      NdefRecord record = NdefRecord.createMime( "text/html", "Hello world in <b>HTML</b> !");
      NdefMessage message = new NdefMessage(new NdefRecord[] { record });
      if (writeTag(message, detectedTag)) {
          Toast.makeText(this, "Success: Wrote placeid to nfc tag", Toast.LENGTH_LONG)
              .show();
      } 

但由于某种原因,当读取标记时,默认浏览器不会打开。即使浏览器确实有正确的意图过滤器:

        <!-- For these schemes where any of these particular MIME types have been supplied, we are a good candidate. -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:mimeType="text/html"/>
            <data android:mimeType="text/plain"/>
            <data android:mimeType="application/xhtml+xml"/>
            <data android:mimeType="application/vnd.wap.xhtml+xml"/>
        </intent-filter>

我做错了吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要将记录创建为URI。如:

NdefRecord rtdUriRecord1 = NdefRecord.createUri("http://example.com");

答案 1 :(得分:0)

嗯..

显然这是不可能的,清单指定了这个:

https://android.googlesource.com/platform/packages/apps/Browser/+/ics-mr0/AndroidManifest.xml

    <!-- Accept inbound NFC URLs at a low priority -->
    <intent-filter android:priority="-101">
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>

这是如此限制。难怪为什么二维码胜过NFC。

如果您这么想的话,请投票给我的功能请求!

https://code.google.com/p/android/issues/detail?id=68668