NdefRecord崩溃取决于设备

时间:2013-04-13 13:53:30

标签: android nfc

我有一种奇怪的情况,一行代码会导致一部手机崩溃,另一行则不会。特定的行是我创建新的NdefRecord()的行。我已经在下面添加了代码段。虽然评论中的版本适用于两部手机,但我仍然想知道为什么我会看到这种效果。

对NdefRecord(short tnf,byte [] type,byte [] id,byte [] payload)的构造函数的引用我不清楚。根据源代码,它永远不应该使用null作为参数(source at Grepcode)。

 private void setNdefBinary(byte[] bdata, int size, int index) {
    NdefRecord record;
    byte[] payload;

    // copy bytes into payload
    payload = new byte[size + 1];
    payload[0] = (byte) (index & 0xff);
    System.arraycopy(bdata, 0, payload, 1, size);

    /* this works on Xperia S and Samsung S3
        byte[] empty = new byte[0]; 
        record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, payload); */

        // this crashes on Xperia S, but works on Samsung S3
        record = new NdefRecord(NdefRecord.TNF_UNKNOWN, null, null, payload);

    ndefRecords[index] = record;

}

1 个答案:

答案 0 :(得分:2)

您在Android SDK中看到了NdefRecord的不同实现。后来的Android SDK允许空参数,较早的不允许。

Android> = 16接受空有效负载。传递inn空字节数组,使其全部向后兼容。