Как читать и писать теги Android NFC? - PullRequest
11 голосов
/ 05 апреля 2011

Я следовал некоторому руководству, используя исходный код Adam Rocker для моего NFCTest.Я хочу иметь возможность читать и писать теги NFC, а также запускать приложение.

Ответы [ 5 ]

15 голосов
/ 26 августа 2012

Служебный проект NDEF Tools для Android помогает выполнить следующие действия:

  1. Обнаружение , затем
  2. Чтение или , запись или
  3. Луч (push) Содержимое NFC

Проект также включает привязки данных для всех стандартизированных типов записей NDEF, что действительно упрощает работу по сравнению с работой с классами NDEF (на основе байтового массива), включенными в Android SDK.

Также см. Плагин NFC Eclipse для графического редактора NDEF - поставляется с утилитой приложение , которая читает и записывает в теги и лучи, а также имеет интеграцию с NFC reader.

Кстати, вы ищете Android Application Record для запуска приложения. Функция запуска не требует какой-либо реальной реализации; он встроен в Android> = 4.0, поэтому достаточно поместить эту запись в тег.

11 голосов
/ 17 февраля 2015

Прежде всего вам необходимо получить разрешение в файле AndroidManifest.xml для NFC. Разрешения:

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

Операция, которая будет выполнять операцию чтения / записи NFC, добавьте этот фильтр намерений в это действие в файле AndroidManifest.xml:

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

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

В методе onCreate () вашего действия вы должны инициализировать адаптер NFC и определить 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);

В onResume () функция обратного вызова позволяет отправке переднего плана обнаруживать намерение NFC.

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

В обратном вызове onPause () вы должны отключить отправку сообщения:

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

В методе обратного вызова onNewIntent () вы получите новый Nfc Intent. После получения Intent вам необходимо проанализировать намерение обнаружить карту:

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

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

Теперь у вас есть тег. Затем вы можете проверить список технологий тегов, чтобы обнаружить этот тег. Техника обнаружения тегов находится здесь в Мой Другой Ответ Полный проект можно посмотреть здесь Мой профиль на github

2 голосов
/ 19 августа 2017

прежде всего поместите их в манифест:

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

, а затем вставьте это в свою деятельность, которую вы хотите прочитать NFC:

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

в конце добавить вперед, как моя активность:

/ * * Copyright (C) 2010 Проект с открытым исходным кодом Android * Copyright (C) 2011 Адам Нибек * * Лицензировано по лицензии Apache, версия 2.0 («Лицензия»); * Вы не можете использовать этот файл, кроме как в соответствии с Лицензией. * Вы можете получить копию лицензии на * * http://www.apache.org/licenses/LICENSE-2.0 * * Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение * распространяется по лицензии распространяется на основе "как есть", * БЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО ВИДА, явных или подразумеваемых. * См. Лицензию для конкретного языка, регулирующего разрешения и * ограничения по лицензии. * /

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

}
1 голос
/ 05 февраля 2015

Вы можете найти простую библиотеку NFC с примером здесь: https://github.com/mateuyabar/pillowNFC

1 голос
/ 05 апреля 2011

Я думаю, что код, который вы нашли, относится к эре до 2.3.3.На данный момент он не смог написать тег, но с Android 2.3.3 это возможно.Нет необходимости пытаться взломать систему и написать подобные теги.

Посмотрите демонстрационный проект NFC: http://developer.android.com/resources/samples/NFCDemo/index.html

...