【问题标题】:How to avoid launching an NFC-enabled app?如何避免启动支持 NFC 的应用程序?
【发布时间】:2016-05-10 17:35:07
【问题描述】:

假设我有 2 个活动:

  1. MainActivity 和
  2. 第二个活动。

我想要实现的是通过发现 NFC 标签从 MainActivity 传递到 SecondActivity。我通过将意图过滤器添加到 SecondActivity 标记下的清单来使其工作。

但我的问题是,即使应用程序被终止,应用程序也会启动并登陆第二个活动。基本上,我希望标签发现仅在我处于主要活动中时发生(在单击按钮开始阅读之后)。

我尝试在 MainActivity 的 onCreate() 方法中以编程方式添加意图过滤器并覆盖 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 };

【问题讨论】:

    标签: android android-intent android-activity nfc


    【解决方案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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,那么问题是您的活动也会在应用未运行时触发。

      如果这是重点,那么问题在于您已在 AndroidManifest.xml 文件中声明您的 Activity 将在 NFC 事件上触发,解决方案是从清单中的 Activity 声明中删除 NFC 块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 2011-03-31
        相关资源
        最近更新 更多