[英]Read RFID tags using NFC
我正在開發一個需要讀取RFID標簽的應用程序。 您能告訴我,Android設備支持哪些RFID標簽,我是否需要額外的硬件或某些東西來讀取RFID標簽,或者只能通過NFC來讀取。 我在上面進行研發,我知道可以通過NFC讀取RFID標簽,並且我在開發人員網站上對代碼進行了整數化處理,但是我無法讀取RFID標簽(用於出席的RFID標簽)
public class NFCForegroundUtil {
private NfcAdapter nfc;
private Activity activity;
private IntentFilter intentFiltersArray[];
private PendingIntent intent;
private String techListsArray[][];
public NFCForegroundUtil(Activity activity) {
super();
this.activity = activity;
nfc = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());
intent = PendingIntent.getActivity(activity, 0, new Intent(activity,
activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*");
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("Unable to speciy */* Mime Type", e);
}
intentFiltersArray = new IntentFilter[] { ndef };
techListsArray = new String[][] { new String[] {IsoDep.class.getName(),NfcV.class.getName(), NfcA.class.getName(), NfcB.class.getName(), NfcF.class.getName(), Ndef.class.getName(), NdefFormatable.class.getName(), MifareClassic.class.getName(), MifareUltralight.class.getName()} };
}
public void enableForeground()
{
Log.d("demo", "Foreground NFC dispatch enabled");
nfc.enableForegroundDispatch(
activity, intent, intentFiltersArray, techListsArray);
}
public void disableForeground()
{
Log.d("demo", "Foreground NFC dispatch disabled");
nfc.disableForegroundDispatch(activity);
}
public NfcAdapter getNfc() {
return nfc;
}
}
您可以閱讀此主題使用Android手機讀取RFID
NFC家伙評論:
您可以將NFC標簽視為RFID標簽的特例。 更具體地說,Android支持與ISO 14443和ISO 15693兼容的RFID標簽。
以下代碼用於讀取清單中的NFCv(ISO 15693):
<uses-permission android:name="android.permission.NFC" />
<activity
android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_list">
</meta-data>
</activity>
nfc_tech_list.xml將如下所示:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
然后,您只需要調整您的活動,如果您的應用程序已關閉,則將調用onCreate,如果應用程序已打開,則每次檢測到nfc時都會調用onNewIntent。 首先注冊nfc:
@Override
public void onResume() {
super.onResume();
if(checkNFCAvailability())
mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);
}
@Override
public void onPause() {
super.onPause();
mNfcAdapter.disableForegroundDispatch(this);
}
private boolean checkNFCAvailability() {
PackageManager pm = getPackageManager();
//NFC NOT AVAILABLE
if(!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
return false;
} else {
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
//NFC AVAILABLE BUT DISABLED
if(Build.VERSION.SDK_INT >= 16) {
startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
} else {
startActivity(new Intent(Settings.ACTION_SETTINGS));
}
//NFC AVAILABLE AND ENABLED
else {
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
mFilters = new IntentFilter[] {ndef,};
mTechLists = new String[][] { new String[] { android.nfc.tech.NfcV.class.getName() } };
}
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
//Do your logic using operations like
NfcV nfcvTag = NfcV.get(myTag);
nfcvTag.connect();
response = nfcvTag.transceive(new byte[]); //your address
nfcvTag.close();
}
}
您必須匯入
import android.nfc.Tag;
import android.nfc.tech.NfcV;
import android.content.pm.PackageManager;
import android.nfc.NfcAdapter;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.