意图过滤器 android.nfc.action.NDEF_DISCOVERED 不工作

Intent-filter android.nfc.action.NDEF_DISCOVERED not working

我正在构建一个通过 NFC 发送数据的应用程序。我让它工作但改变了命名空间,一些构建选项来制作发布 APK,更新 Android Studio 和其他东西,但没有改变代码,它不再工作了。

这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.devdr.touch"
    android:versionCode="1"
    android:versionName="0.1" >
[...]
<activity
    android:name="com.devdr.touch.ui.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name="com.devdr.touch.ui.NFCDisplayActivity"
    android:label="NFC Data Display">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/com.devdr.touch" />
    </intent-filter>
</activity>

这是我的 NDEF 消息:

// Record to launch Play Store if app is not installed
NdefRecord appRecord = NdefRecord.createApplicationRecord(this.getPackageName());

// Record with actual data we care about
NdefRecord relayRecord = NdefRecord.createMime(
        "application/" + this.getPackageName()                  ,
         byteArray);

// Complete NDEF message with both records
NdefMessage mNdefMessage = new NdefMessage(new NdefRecord[]{relayRecord
        , appRecord
});

this.getPackageName() 处的断点给出:"com.devdr.touch"

现在接收数据的 phone 启动 phone 参数或我的应用程序但在 MainActivity 如果 AAR 不存在,或我的应用程序但在 MainActivity 如果 AAR 存在。

有什么调试方法的建议吗?

编辑 1

添加我的清单的一部分和 this.getPackageName() 的值。当我开始签署我的 APK 以发布时,它或多或少开始出现错误。

编辑 2

好的,现在我知道问题出在哪里了,但不知道如何解决: 变量 byteArray 由一个对象组成。该对象包含 2 个字符串和 1 个图像。现在我要发送更大的图像,但似乎处理不当。使用 50ko 图像需要 40 秒!知道为什么这么慢吗?

显然,如果在 NDEF 消息完全写入 NFC 标签之前中断写入传输(例如,通过将标签撕裂超出范围),NFC 标签将不会处于一致状态并且 Android 设备稍后将根本检测不到任何 NDEF 消息(或者它甚至可能检测到内容无效的 NDEF 消息!)

我什至很惊讶你有一个可以容纳 50 KiB 数据的 NFC 标签。但是既然你这样做了,那么 40 秒对于那么多的数据来说听起来是合理的。 NFC 支持 106 kbps(甚至 212 kbps 和 424 kbps)的传输速度,这大约是。每秒 13 KiB。然而,这只是总数据速率。您不能指望以这种速度传输您的实际网络数据。事实上,根据标签的不同,您将获得明显较低的净数据速率。例如,对于类型 2 标签,底层 WRITE 命令将一次仅写入 4 个字节,命令开销为 2 个字节 + 帧 + 响应往返时间 + 命令-响应序列之间的延迟。即使对于类型 4 标签(有效负载开销比通常要小得多),您的净数据速率通常约为总数据速率的 1/10(至少这是我在 [=14 上读取电子护照的经验) =]).