假设我有2项活动:
我想要实现的是通过发现NFC标签从MainActivity传递到SecondActivity。我通过将intent-filter添加到SecondActivity标记下的清单来实现它。
但我的问题是即使应用程序被杀,应用程序也会启动并登陆第二个活动。基本上,我希望标签发现只在我进入主要活动时(点击按钮开始阅读后)才会发生。
我尝试在MainActivity的onCreate()
方法中以编程方式添加intent-filter并覆盖onNewIntent()
方法,但没有运气。
我还尝试将launchMode设置为“singleTop”但没有成功。
以下是我添加到MainActivity的onCreate()
方法的内容:
adapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
writeTagFilters = new IntentFilter[] { tagDetected };
答案 0 :(得分:1)
您可以在MainActivity
注册前台发送。然后,在收到NFC意图后,您可以启动SecondActivity
并将意图传递给它:
@Override
public void onResume() {
super.onResume();
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
PendingIntent pendingIntent = PendingIntent.getActivity(
this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
adapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
@Override
public void onPause() {
super.onPause();
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
adapter.disableForegroundDispatch(this);
}
@Override
public void onNewIntent(Intent intent) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Intent newIntent = new Intent(this, SecondActivity.class);
newIntent.putExtra("NFC_INTENT", intent);
startActivity(newIntent);
}
}
答案 1 :(得分:1)
如果我正确理解了您的问题,问题是您的活动也会在应用未运行时触发。
如果这就是重点,那么问题是您已经在AndroidManifest.xml文件中宣布您的活动在NFC事件上被触发,解决方案是从清单中的活动声明中删除NFC块。