意图过滤器 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 上读取电子护照的经验) =]).
我正在构建一个通过 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 上读取电子护照的经验) =]).