web-dev-qa-db-fra.com

Comment lire et écrire Android NFC Tags?

J'ai suivi un didacticiel en utilisant le code source Adam Rocker pour mon NCCTTEST. Je veux être capable de lire et d'écrire NFC Tags et lancez également une application.

15
ogfasasi

Les NDEF outils pour Android Projet utilitaire aide à faire ce qui suit

  1. détecter , puis
  2. LIRE ou écrire , ou
  3. faiscea (poussoir) NFC Contenu

Le projet comprend également des liaisons de données pour tous les types d'enregistrement NDEF normalisés, ce qui simplifie vraiment les choses par rapport à la collaboration avec les classes NDEF (Byte-Array) incluses dans l'Android SDK.

Voir également le plug-in NFC Eclipse pour un éditeur NDEF graphique - est livré avec une utilitaire app qui lit et écrit aux balises et aux faisceaux, a également NFC Reader l'intégration.

À propos, vous recherchez l'enregistrement d'application Android pour lancer l'application. La "fonctionnalité" de lancement ne nécessite aucune mise en œuvre réelle; Il est intégré à Android> = 4.0, alors mettre cet enregistrement sur une balise suffit.

15
ThomasRS

Tout d'abord, vous devez obtenir la permission dans AndroidManifest.xml Fichier pour NFC. Les autorisations sont:

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

L'activité qui effectuera NFC Lecture/écriture, ajoutez ce filtre à l'intention dans cette activité dans AndroidManifest.xml Fichier:

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

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

Dans votre activité ONCREATE (), vous devez initialiser le NFC Adaptateur et définir l'intention en attente:

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);

Dans ONRESUME () Rappel Retour Activer l'envoi de premier plan à détecter NFC Intention.

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

Dans Onpaause () Rappel, vous devez désactiver la DISPONIBLE DE DISPOSITION DE FORTRAGRY:

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

Dans OneNewintent () Appelez la méthode, vous obtiendrez la nouvelle intention NFC. Après avoir obtenu l'intention, vous devez analyser l'intention de détecter la carte:

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

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

Maintenant, vous avez la balise. Ensuite, vous pouvez vérifier la liste Tag Tech pour détecter cette balise. La technique de détection des balises est ici ma réponse à une autre réponse Le projet complet complet est ici mon profil GitHub

11
Md. Sajedul Karim

tout d'abord, mettez-les dans votre manifeste:

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

puis mettez cela dans votre activité que vous souhaitez lire NFC:

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

à la fin, ajoutez-vous comme mon activité:

/ * * Copyright (c) 2010 THE Android Open Source Project * Copyright (C) 2011 Adam Nybäck * * sous licence sous la licence Apache, version 2.0 (la "licence"); * Vous pouvez ne pas utiliser ce fichier sauf en conformité avec la licence. * Vous pouvez obtenir une copie de la licence à * * http://www.apache.org/licens/license-2. * * Sauf si requis par La loi applicable ou acceptée par écrit, les logiciels * distribués sous la licence sont distribués sur une base "tel quel", * sans garantie OR conditions de quelque nature que ce soit, expresse ou implicite. * Voir le Licence pour la langue spécifique régissant les autorisations et * Limitations sous la licence. * /

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
hoseini_pro

Vous pouvez trouver un simple NFC Library avec un exemple ici: https://github.com/mateyabar/pillownfc

1
Mateu

Je pense que le code que vous avez trouvé fait référence à l'époque PRE 2.3.3. À ce stade, il n'a pas été capable d'écrire une balise, mais avec Android 2.3.3 C'est possible. Il n'est pas nécessaire d'essayer de pirater le système et d'écrire des étiquettes comme celle-ci.

Regardez le NFC Demo: - http://developer.android.com/resources/samples/nfcdemo/index.html

1
Sven Haiges