こんにちは、NFCタグから読み取ろうとしています。しかし、私は例外を受けています。
タグを検出するためにこの条件を設定しましたか?
if(NfcAdapter.ACTION_TAG_DISCOVERED != null)
この条件は正しいですか?
まず、NFC アダプターを初期化し、onCreate コールバックで 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() Call back で、Foreground Dispatch が NFC インテントを検出できるようにします。
mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
onPause() コールバックでは、フォアグラウンド ディスパッチを無効にする必要があります。
if (mAdapter != null) {
mAdapter.disableForegroundDispatch(this);
}
onNewIntent() コールバック メソッドで、新しい Nfc インテントを取得します。The Intent を取得したら、インテントを解析してカードを検出する必要があります。
@Override
protected void onNewIntent(Intent intent) {
getTagInfo(intent)
}
private void getTagInfo(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String[] techList = tag.getTechList();
for (int i = 0; i<techList.length; i++) {
if (techList[i].equals(MifareClassic.class.getName())) {
MifareClassic mifareClassicTag = MifareClassic.get(tag);
switch (mifareClassicTag.getType()) {
case MifareClassic.TYPE_CLASSIC:
//Type Clssic
break;
case MifareClassic.TYPE_PLUS:
//Type Plus
break;
case MifareClassic.TYPE_PRO:
//Type Pro
break;
}
} else if (techList[i].equals(MifareUltralight.class.getName())) {
//For Mifare Ultralight
MifareUltralight mifareUlTag = MifareUltralight.get(tag);
switch (mifareUlTag.getType()) {
case MifareUltralight.TYPE_ULTRALIGHT:
break;
case MifareUltralight.TYPE_ULTRALIGHT_C:
break;
}
} else if (techList[i].equals(IsoDep.class.getName())) {
// info[1] = "IsoDep";
IsoDep isoDepTag = IsoDep.get(tag);
} else if (techList[i].equals(Ndef.class.getName())) {
Ndef.get(tag);
} else if (techList[i].equals(NdefFormatable.class.getName())) {
NdefFormatable ndefFormatableTag = NdefFormatable.get(tag);
}
}
}
完全な完全なコードはこちらです。
コードに関する質問に答えるには -
それは常に真です-NfcAdapter.ACTION_TAG_DISCOVERED
定数値です-使用する必要があります:
getIntent().getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)
それを比較します。
しかし、それはおそらくあなたの例外とは何の関係もありません-
その声明は常に真実です。
私は正しい軌道に乗るための定型プロジェクトを含むプロジェクトを作成しました。