Pytanie Jak czytać i pisać tagi Android NFC?


Podążyłem za kilkoma samouczkami, używając kodu źródłowego adam rocker dla mojego NFCTest. Chcę móc czytać i pisać tagi NFC, a także uruchamiać aplikację.


11
2018-04-05 03:43


pochodzenie


Sprawdź to : stackoverflow.com/a/45773087/5733853 - HPbyP


Odpowiedzi:


The Narzędzia NDEF dla Androida projekt narzędziowy pomaga wykonać następujące czynności

  1. Wykryć, następnie
  2. Czytać lub pisać, lub
  3. Belka (push) zawartość NFC

Projekt zawiera także powiązania danych dla wszystkich standardowych typów rekordów NDEF, co naprawdę upraszcza działania w porównaniu do pracy z klasami NDEF opartymi na tablicy (bajtów), które są zawarte w pakiecie SDK systemu Android.

Zobacz także Wtyczka NFC Eclipse dla graficznego edytora NDEF - jest wyposażony w narzędzie aplikacja który czyta i pisze do znaczników i belek, ma również integrację czytnika NFC.

Przy okazji, szukasz rekordu aplikacji Android do uruchomienia aplikacji. Uruchomienie "funkcji" nie wymaga żadnej rzeczywistej implementacji; jest wbudowany w system Android> = 4.0, więc wystarczy umieścić ten rekord na tagu.

Edytuj: zaktualizowane linki


15
2017-08-26 02:52



czytam na czytaniu i pisaniu NFC i miałem zamiar usunąć zaćmienie i przejść przez ADT, czy wtyczka nfc-eclipse byłaby kompatybilna / użyta? samouczek youtube wygląda na czysty - alex
przepraszam, miałem na myśli Android Studio - alex
To wygląda obiecująco. Czy możemy jednak czytać i pisać w tym samym działaniu? - M-T-A
To jest proste, tak. - ThomasRS


Przede wszystkim musisz uzyskać pozwolenie w pliku AndroidManifest.xml dla NFC. Uprawnienia są:

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" />

Czynność, która wykona operację odczytu / zapisu NFC, doda ten filtr intencji do tego działania w pliku AndroidManifest.xml:

          <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

W swojej metodzie onCreate () należy zainicjować adapter NFC i zdefiniować Pending Intent:

NfcAdapter mAdapter;
PendingIntent mPendingIntent;
mAdapter = NfcAdapter.getDefaultAdapter(this);   
if (mAdapter == null) {
    //nfc not support your device.
    return;
}
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
        getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

W onResume () Call back umożliwia Foreground Dispatch wykrycie intencji NFC.

mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);

W wywołaniu zwrotnym onPause () konieczne jest wyłączenie przesyłania forground:

    if (mAdapter != null) {
        mAdapter.disableForegroundDispatch(this);
    }

W metodzie wywołania onNewIntent () otrzymasz nowy zamiar Nfc. Po uzyskaniu The Intent, musisz przeanalizować zamiar wykrycia karty:

@Override
protected void onNewIntent(Intent intent){    
    getTagInfo(intent)
}

private void getTagInfo(Intent intent) {
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}

Teraz masz Tag. Następnie możesz sprawdzić listę Tag Tech, aby wykryć ten Tag. Technika wykrywania tagów jest tutaj Moja kolejna odpowiedź Pełny kompletny projekt jest tutaj Mój profil githuba


11
2018-02-17 16:21



Witaj, Panie Karim, chciałbym stworzyć własną cyfrową wizytówkę, więc proszę dać mi znać, którą naklejkę nfc muszę kupić? - Sun
Możesz użyć Mifare Classic 1k. Ma ogromną pamięć (1024 bajty) i każdy blok można napisać 16 bajtów na raz. Możesz również zablokować swoje dane, aby zapobiec dalszemu zapisywaniu. - Md. Sajedul Karim


po pierwsze umieść je w swoim manifeście:

<uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.INTERNET" />

a następnie umieść to w swojej działalności, którą chcesz przeczytać NFC:

<intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

na koniec dodaj dalej jak moja aktywność:

/ *  * Copyright (C) 2010 Android Open Source Project  * Copyright (C) 2011 Adam Nybäck  *  * Licencjonowane na podstawie licencji Apache, wersja 2.0 ("Licencja");  * nie możesz używać tego pliku, chyba że jest to zgodne z Licencją.  * Możesz otrzymać kopię Licencji na  *  * http://www.apache.org/licenses/LICENSE-2.0  *  * O ile nie jest to wymagane przez obowiązujące prawo lub nie zostało udzielone na piśmie, oprogramowanie  * dystrybuowane w ramach licencji są rozpowszechniane na zasadzie "AS IS",  * BEZ JAKICHKOLWIEK GWARANCJI LUB WARUNKÓW, wyraźnych lub dorozumianych.  * Zobacz licencję dla określonego języka, w którym obowiązują uprawnienia i  * ograniczenia w ramach licencji.  * /

package ***.***.***.***;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.AnimationDrawable;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.balysv.materialripple.MaterialRippleLayout;
import com.blogspot.android_er.androidnfctagdiscovered.R;
import com.pixelcan.inkpageindicator.InkPageIndicator;

import hpbyp.ir.app.hojre.fragment.slider.SliderPagerAdapter;
import hpbyp.ir.app.hojre.utiles.G;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;

/**
 * An {@link Activity} which handles a broadcast of a new tag that the device just discovered.
 */
public class ActivityLoadDataFromNFC extends AppCompatActivity {
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load_data_from_nfc);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mAdapter = NfcAdapter.getDefaultAdapter(this);
        if (mAdapter == null) {
            //nfc not support your device.
            return;
        }
        mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
                getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    }

    NfcAdapter mAdapter;
    PendingIntent mPendingIntent;

    @Override
    protected void onResume() {
        super.onResume();
        mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);

    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mAdapter != null) {
            mAdapter.disableForegroundDispatch(this);
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        GetDataFromTag(tag, intent);

    }

    private void GetDataFromTag(Tag tag, Intent intent) {
        Ndef ndef = Ndef.get(tag);
        try {
            ndef.connect();
//            txtType.setText(ndef.getType().toString());
//            txtSize.setText(String.valueOf(ndef.getMaxSize()));
//            txtWrite.setText(ndef.isWritable() ? "True" : "False");
            Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

            if (messages != null) {
                NdefMessage[] ndefMessages = new NdefMessage[messages.length];
                for (int i = 0; i < messages.length; i++) {
                    ndefMessages[i] = (NdefMessage) messages[i];
                }
                NdefRecord record = ndefMessages[0].getRecords()[0];

                byte[] payload = record.getPayload();
                String text = new String(payload);
                Log.e("tag", "vahid" + text);
                ndef.close();

            }
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Cannot Read From Tag.", Toast.LENGTH_LONG).show();
        }
    }

}

2
2017-08-19 15:08





Myślę, że znaleziony kod odnosi się do epoki przed 2.3.3. W tym momencie nie udało się napisać tagu, ale w systemie Android 2.3.3 jest to możliwe. Nie trzeba próbować hakować systemu i pisać takich znaczników.

Rzuć okiem na projekt demonstracyjny NFC: http://developer.android.com/resources/samples/NFCDemo/index.html


1
2018-04-05 12:20





Możesz znaleźć prostą bibliotekę NFC z przykładem tutaj: https://github.com/mateuyabar/pillowNFC


1
2018-02-05 10:02