如何避免启动支持NFC的应用?

时间:2014-01-05 23:16:49

标签: android android-intent android-activity nfc

假设我有2项活动:

  1. MainActivity和
  2. SecondActivity。
  3. 我想要实现的是通过发现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 };
    

2 个答案:

答案 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块。