0

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

  1. 如果应用程序关闭并且在手机附近放了一张卡片,则应该启动 main-activity 并同时启动 nfc-asynctask。asynctask 的结果应显示在对话框中。
  2. 如果打开应用程序并在附近放了一张卡片,则应重新启动 nfc-asynctask,并且只应打开一个显示结果的对话框。

我目前的方法总是启动主要活动。这意味着有时,我的主活动有多个实例,当用户点击后退按钮时,不是切换到主菜单,而是打开了另一个活动实例。

显现

<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>
4

1 回答 1

1

看看 Android 的前台调度工具。如果您为前台调度注册您的应用程序,您的活动将收到一个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" />
于 2013-10-18T16:28:14.317 回答