2011-04-05 21 views

Respuesta

1

Creo que el código que ha encontrado se refiere a la era anterior a la 2.3.3. En este punto, no pudo escribir una etiqueta, pero con Android 2.3.3 esto es posible. No hay necesidad de intentar hackear el sistema y escribir etiquetas como esta.

Tenga una mirada en el Proyecto de Demostración de la NFC: http://developer.android.com/resources/samples/NFCDemo/index.html

15

El proyecto utilidad NDEF Tools for Android ayuda a hacer la siguiente

  1. Detect, entonces
  2. Read o write, o
  3. Beam (push) Contenido NFC

El proyecto también incluye enlaces de datos para todos los tipos de registros NDEF estandarizados, lo que realmente simplifica las cosas en comparación con el trabajo con las clases (basadas en arreglos de bytes) NDEF incluidas en el SDK de Android.

También vea el NFC Eclipse plugin para obtener un editor NDEF gráfico - viene con una utilidad app que lee y escribe en etiquetas y vigas, también tiene integración con lector NFC.

Por cierto, está buscando el Registro de aplicaciones de Android para iniciar la aplicación. La 'característica' de lanzamiento no requiere ninguna implementación real; está integrado en Android> = 4.0, por lo que poner ese registro en una etiqueta es suficiente.

Editar: Actualización enlaces

+0

estoy leyendo sobre NFC lectura y escritura y yo estaba a punto de quitar el eclipse y repasar ADT, volvería a la NFC -eclipse-plugin ser compatible/usable? el tutorial de youtube se ve limpio – alex

+0

lo siento quise decir Android Studio – alex

+0

Esto parece prometedor. Sin embargo, ¿podemos leer y escribir en la misma actividad? –

11

En primer lugar se tienen que pedir permiso en el archivo AndroidManifest.xml para NFC. Los permisos son:

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

la actividad que va a realizar la operación de lectura/escritura de la NFC, anadir este filtro de intención en la que la actividad en el archivo AndroidManifest.xml:

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

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

En el método que la actividad onCreate() tiene que inicializar el adaptador de la NFC y definir intención Pendiente:

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

En onResume() volver a llamar permitir al primer plano de Despacho para detectar NFC intención.

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

En onPause() de devolución de llamada que debe tener para desactivar el envío forground:

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

En onNewIntent() devolver la llamada método obtendrá el nuevo Intención NFC. Después de obtener The Intent, debe analizar el intento de detectar la tarjeta:

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

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

Ahora tiene la etiqueta.Luego puede consultar la lista Tag Tech para detectar esa etiqueta. La técnica de detección de etiqueta es aquí en My Another Answer proyecto completo completa es aquí en My github profile

+0

Hola, Sr. Karim, me gustaría crear mi propia tarjeta de visita digital, así que por favor dígame qué etiqueta de nfc necesito comprar. – Sun

+0

Puedes usar Mifare Classic 1k. Tiene una gran memoria (1024 bytes) y cada bloque puede escribir 16 bytes a la vez. También puede bloquear sus datos para evitar escribir más. –

2

en primer lugar poner estos en su manifiesto:

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

y luego poner esto en su actividad que desea leer NFC:

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

al final añadir seguir adelante como mi Actividad:

/* * Copyright (C) 2010 The Android Open Source Project * Copyright (C) 2011 Adam Nybäck * * Licencia bajo la Licencia Apache, Versión 2.0 (la "Licencia"); * no puede usar este archivo excepto en conformidad con la Licencia. * Usted puede obtener una copia de la Licencia en * * http://www.apache.org/licenses/LICENSE-2.0 * * A menos que lo requiera la ley aplicable o se acuerde por escrito, el software * distribuido bajo la Licencia se distribuye "tal cual", * SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. * Consulte la Licencia para ver el lenguaje específico que rige los permisos y * limitaciones bajo la Licencia. */

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

} 
Cuestiones relacionadas