如果您有其他应用程序可以在更高级别(NDEF_DISCOVERED 或 TECH_DISCOVERED)管理相同的标签,那么您的应用程序只管理较低级别,永远不会被调用。
要使用您的应用程序,您需要打开您的应用程序,而不是扫描标签。
如果您的应用永远无法启动,请确保已完成以下步骤:
在 OnCreate() 中获取您的 NfcAdapter:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter == null) {
// Stop here, we definitely need NFC
Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();
finish();
return;
}
//method to handle your intent
handleTag(getIntent());
}
在 onResume 中启用前台调度:
@Override
public void onResume() {
super.onResume();
final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
在 onPause 禁用它:
@Override
protected void onPause() {
mNfcAdapter.disableForegroundDispatch(this);
super.onPause();
}
在 onNewIntent 调用函数来处理你的意图
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleTag(intent);
}
在您的函数中处理您的标签:
private void handleTag(Intent intent){
String action = intent.getAction();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action){
// here your code
}
}
不要忘记在清单中添加权限:
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
<activity>
....
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
</activity>
更多信息在这里NFC 基础和这里阅读 NFC 标签