Вы находитесь на странице: 1из 8

Universidad Laica Eloy Alfaro de Manabí

Extensión Chone

Facultad:

Ciencias Informáticas

Materia:

Programación Móvil

Tema:

Sensor NFC

Integrantes:

Alcívar Zambrano María Daniela

Arau Zambrano Jorge Miguel

Bravo Mera Carmen Daniela

Loor Fabián Enrique

Docente:

Ing. Cristian Minaya

Ingeniería en Sistema

4to Semestre “A”

2018
INTRODUCCION

Sensor NFC

Como ha sido usual para nuestra área, los adelantos tecnológicos han sido un aspecto a
enfrentar y adaptar por medio de esfuerzos tanto prácticos como académicos, que nos han
llevado a ser lo que son ahora las unidades de información y, hasta cierto punto, las mismas
sociedades, cambiando estilos de vida, y discursos sociales, políticos y económicos del día a
día.

Lo asombroso de este asunto, es que estos adelantos son tan agigantados que generan
confusión y desconcierto en gran parte de la población (por lo general a aquella que pertenece
a generaciones nacidas antes de los años 80’s, y aquella que pertenece a países en vía de
desarrollo). Sin embargo, el uso de nuevas tecnologías se hace inminente debido a que las
poblaciones las van adquiriendo poco a poco para vivir de una manera diferente a la forma
en que las actividades y cosas funcionan.

En este marco, con un objetivo de actualización y sin ganas de evitar otro tipo de temas de
igual o mayor importancia para el momento de la ciencia de la información en la sociedad,
hoy mi post busca hacer una introducción a la tecnología Near Field Communication (NFC)
que se empieza a encontrar en diferentes aparatos móviles como celulares y tablets. Me
parece que como científicos de la información estamos en la obligación de estar al tanto de
los avances y estándares que se van introduciendo en la vida de las sociedades, para actuar
con más coherencia y conocimiento de esta constante situación que nos acecha para
afrontarla.

Tampoco busco ser trágico con este tema, pero sí me ha parecido un ejercicio interesante
tratar esta tecnología debido a su impacto, uso hasta el día de hoy, y novedad que representa
una oportunidad para explorar a futuro en las diversas unidades de información. Es así que
el NFC se constituye como un medio de comunicación entre dos dispositivos, acercándolos
para “hacer transacciones, intercambiar contenidos digitales y conectar dispositivos con un
toque” según dice el NFC Forum.
CONTENIDO

Activity_check_nfc.xml

<?xml version="1.0" encoding="utf-8"?>


<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.usuario.addnfc.CheckNFC">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="368dp"
android:orientation="vertical"
android:layout_height="495dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.pdm.check_assistance.CheckNFC"
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp">

<TextView
android:id="@+id/sesion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sesion" />
</LinearLayout>

</android.support.constraint.ConstraintLayout>

CHECKNFC.JAVA

package com.example.usuario.addnfc;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.AsyncTask;
import android.service.voice.VoiceInteractionSession;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class CheckNFC extends AppCompatActivity {


public static final String MIME_TEXT_PLAIN = "text/plain";
public static final String TAG = "NfcTag";

private String URL_BASE = "http://192.168.43.104:8000";


private static final String URL_JSON = "/CheckFromNfc/";

private TextView sesion;


private NfcAdapter mNfcAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_nfc);

sesion = (TextView) findViewById(R.id.sesion);


mNfcAdapter = NfcAdapter.getDefaultAdapter(this);

if (mNfcAdapter == null) {
// Es necesario nfc
Toast.makeText(this, "El dispositivo no soporta NFC.",
Toast.LENGTH_LONG).show();
finish();
return;

if (!mNfcAdapter.isEnabled()) {
sesion.setText("NFC is disabled.");
Toast.makeText(this, "Activa NFC para continuar.",
Toast.LENGTH_LONG).show();

}
//manejamos inten
handleIntent(getIntent());
}

@Override
protected void onResume() {
super.onResume();
//Es necesario que la actividad se desarrolle en segundo
//plano o se producirá una excepción
setupForegroundDispatch(this, mNfcAdapter);
}

@Override
protected void onPause() {
stopForegroundDispatch(this, mNfcAdapter);
super.onPause();
}

@Override
protected void onNewIntent(Intent intent) {
//Metodo llamado cuando se produce un nuevo inten, es decir,
//cuando el cliente acerca una tag al dispositivo
handleIntent(intent);
}

public static void setupForegroundDispatch(final Activity activity,


NfcAdapter adapter) {
final Intent intent = new
Intent(activity.getApplicationContext(), activity.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

final PendingIntent pendingIntent =


PendingIntent.getActivity(activity.getApplicationContext(), 0, intent,
0);

IntentFilter[] filters = new IntentFilter[1];


String[][] techList = new String[][]{};

// Notice that this is the same filter as in our manifest.


filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
try {
filters[0].addDataType(MIME_TEXT_PLAIN);
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("comprueba el mime type!");
}

adapter.enableForegroundDispatch(activity, pendingIntent,
filters, techList);
}

public static void stopForegroundDispatch(final Activity activity,


NfcAdapter adapter) {
adapter.disableForegroundDispatch(activity);
}

private void handleIntent(Intent intent) {


String action = intent.getAction();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {

String type = intent.getType();


if (MIME_TEXT_PLAIN.equals(type)) {

Tag tag =
intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
new NdefReaderTask().execute(tag);

} else {
Log.d(TAG, "Wrong mime type: " + type);
}
} else if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);


String[] techList = tag.getTechList();
String searchedTech = Ndef.class.getName();

for (String tech : techList) {


if (searchedTech.equals(tech)) {
new NdefReaderTask().execute(tag);
break;
}
}
}
//El lector NFC se lleva acabo en una tarea asincrona.
//Las cuales se definen como una subclase privada
class NdefReaderTask extends AsyncTask<Tag, Void, String> {

@Override
protected String doInBackground(Tag... params) {
Tag tag = params[0];

Ndef ndef = Ndef.get(tag);


if (ndef == null) {
// NDEF no es soportada por la tag
return null;
}

NdefMessage ndefMessage = ndef.getCachedNdefMessage();

NdefRecord[] records = ndefMessage.getRecords();


for (NdefRecord ndefRecord : records) {
if (ndefRecord.getTnf() == NdefRecord.TNF_WELL_KNOWN
&& Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {
try {
return readText(ndefRecord);
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "Codificación no soportada", e);
}
}
}
return null;
}

private String readText(NdefRecord record) throws


UnsupportedEncodingException {
byte[] payload = record.getPayload();
// Codificación
String textEncoding;
if ((payload[0] & 128) != 0) textEncoding = "UTF-16";
else textEncoding = "UTF-8";

// Lenguaje
int languageCodeLength = payload[0] & 0063;
return new String(payload, languageCodeLength + 1,
payload.length - languageCodeLength - 1, textEncoding);
}

@Override
protected void onPostExecute(String result) {
if (result != null) {
//Utilizamos el resultado de la tarea asincrona para
pasar
//asistencia. Podemos ejecutar directamente aqui el
//envio de datos al servidor o añadir un botón.
sesion.setText(result);
//Envio

//requestQueue = Volley.newRequestQueue(this);
Map<String, String> params = new HashMap<String,
String>();
params.put("nfcsult");
params.put("dni",datosUsuario.getDni
CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST,
URL_BASE + URL_JSON, params, new Response.Listener<JSONObject>() {

@Override
public void onResponse(JSONObject
response) {
Log.d("Response: ",
response.toString());
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError
response) {

Log.d("Response: ",
response.toString());

Toast toast =
Toast.makeText(getApplicationContext(), "Checked! ", Toast.LENGTH_SHORT);
toast.show();

}
});
gestorPeticiones.getCola().add(jsObjRequest);
}
}
}
}

ANDROIDMANIFEST.XML

<?xml version="1.0" encoding="utf-8"?>


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.usuario.addnfc">

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


<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".CheckNFC">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>

</manifest>

BIBLIOGRAFIA

http://www.infotecarios.com/introduccion-al-nfc-y-sus-primeros-pasos-en-las-bibliotecas/

https://ayuda.orange.es/particulares/otros-productos/nfc/505-que-es-el-nfc-como-funciona-
y-para-que-sirve

https://www.xataka.com/moviles/nfc-que-es-y-para-que-sirve

Вам также может понравиться