NFC检测:启动活动或显示对话框

时间:2013-10-18 13:16:13

标签: android android-activity nfc

我有一个主要活动,它会在列表中显示一些数据, nfc-asynctask 会从卡中读取一些数据。我想实现以下行为:

  1. 如果应用程序已关闭并且卡片放在移动电话附近,则应启动主要活动并同时启动nfc-asynctask。 asynctask的结果应该在对话框中显示。
  2. 如果应用程序已打开且卡片放在附近,则应重新启动nfc-asynctask,并且只应打开包含结果的对话框。
  3. 我目前的做法总是开始主要活动。这意味着有时候,我的主要活动有多个实例,当用户点击后退按钮时,不会切换到主菜单,而是会放置另一个活动实例。

    清单

    <activity
        ...
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="android.nfc.action.TECH_DISCOVERED"/>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/filter_nfc"/>
    </activity>
    

1 个答案:

答案 0 :(得分:1)

查看Android foreground dispatch facility。如果您为前台发送注册了应用,则您的活动会收到onNewIntent()个活动而不是第二次启动。

另外,我建议将TECH_DISCOVERED意图放在一个单独的意图过滤器中:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/filter_nfc" />