我正在构建一个通过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”现在,接收数据的电话将启动电话参数或我的应用程序,但如果不存在AAR,则在MainActivity上启动;如果我的应用程序,如果存在AAR,则在MainActivity上启动。
有什么建议可以调试吗?
编辑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字节。即使对于Type 4标签(有效负载开销比通常要小得多),您的净数据速率通常也将是总数据速率的1/10(至少这是我在Android上阅读电子护照的经验)。