Как я могу отправить простой текст, используя NFC / AndroidBeam, используя язык Java? - PullRequest
0 голосов
/ 09 октября 2019

Я использую NFC для обмена простым текстом. Я пробовал следующий код, но не работает. Я нашел пример Kotlin, который работает должным образом. И можем ли мы совместно использовать данные обоих устройств, используя NFC? Сценарий похож на Google Pay только на одну вкладку и оплату. Я просто делюсь текстом. Я хочу обменять данные обоих устройств на одной вкладке.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    tv=findViewById(R.id.tv);

    NfcManager nfcManager = (NfcManager) getSystemService(NFC_SERVICE);
    mNfcAdapter = nfcManager.getDefaultAdapter();

    mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, 
    getClass())
            .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    }

private static NdefMessage getTestMessage() {
    byte[] mimeBytes = "application/com.example.nfctutorials"
            .getBytes(Charset.forName("US-ASCII"));
    byte[] id = new byte[]{1, 3, 3, 7};
    byte[] payload = "CTS Verifier NDEF Push Tag".getBytes(Charset.forName("US-ASCII"));
    return new NdefMessage(new NdefRecord[]{
            new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, id, payload)
    });
}


@Override
protected void onResume() {
    super.onResume();

    mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
    mNfcAdapter.setNdefPushMessageCallback(this, this);
}

// sending message
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    return getTestMessage();
}


private NdefMessage[] getNdefMessages(Intent intent) {
    Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    if (rawMessages != null) {
        NdefMessage[] messages = new NdefMessage[rawMessages.length];
        for (int i = 0; i < messages.length; i++) {
            messages[i] = (NdefMessage) rawMessages[i];
        }
        return messages;
    } else {
        return null;
    }
}

static String displayByteArray(byte[] bytes) {
    String res = "";
    StringBuilder builder = new StringBuilder().append("[");
    for (int i = 0; i < bytes.length; i++) {
        res += (char) bytes[i];
    }
    return res;
}

// displaying message
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    NdefMessage[] messages = getNdefMessages(intent);
    tv.setText(displayByteArray(messages[0].toByteArray()));
}
...