2014-01-05 59 views
0

假设我有2个活动:如何避免启动支持NFC的应用程序?

  1. MainActivity和
  2. SecondActivity。

我想要实现的是通过发现NFC标签从MainActivity传递到SecondActivity。我通过将意向过滤器添加到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 }; 

回答

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

如果我理解正确你的问题,问题是,你的活动也触发时,应用程序没有运行。

如果这是关键,问题在于您已声明您的活动是在AndroidManifest.xml文件中的NFC事件触发的,解决方案是从清单中的活动声明中删除NFC块。

相关问题