【发布时间】:2022-01-01 00:21:09
【问题描述】:
我想读取 NFC 4K 卡详细信息,它不读取数据,这是我使用的代码,
AndroidManifest.xml
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" />
</activity>
nfc_tech_filter.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
</resources>
MainActivity.java
public class MainActivity extends Activity implements NfcAdapter.ReaderCallback {
public static final String TAG = " --NFC-- " + MainActivity.class.getSimpleName();
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
showToast("No NFC found...");
} else {
showToast("NFC Enables Device...");
enableReaderMode();
}
}
@Override
public void onResume() {
super.onResume();
showToast("On Resume...");
enableReaderMode();
}
@Override
protected void onPause() {
super.onPause();
showToast("On Pause...");
disableReaderMode();
}
private void showToast(String message) {
Log.d(TAG, message);
try {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
showToast("Show Toast Exception : " + message);
}
}
private void enableReaderMode() {
showToast("Enabling reader mode...");
Activity activity = MainActivity.this;
nfcAdapter = NfcAdapter.getDefaultAdapter(activity);
if (nfcAdapter != null) {
nfcAdapter.enableReaderMode(activity, this, Integer.MAX_VALUE, null);
}
}
private void disableReaderMode() {
showToast("Disabling reader mode...");
Activity activity = MainActivity.this;
nfcAdapter = NfcAdapter.getDefaultAdapter(activity);
if (nfcAdapter != null)
nfcAdapter.disableReaderMode(activity);
}
@Override
public void onTagDiscovered(Tag tag) {
Log.d(TAG, "New tag discovered...");
}
@Override
protected void onNewIntent(Intent intent) {
Log.d(TAG, "New Intent...");
super.onNewIntent(intent);
}
}
【问题讨论】: