NFC前台调度同时触发onCreate和onNewIntent

时间:2017-06-28 06:45:08

标签: android android-intent nfc android-pendingintent intentfilter

我试图制作具有以下功能的活动A(启动器活动)。

1.使用nfc标记启动活动A,并在活动A开始后读取nfc标记。

2.当活动A在前台时检测到nfc标记。

它最初像一天一样工作。它会表现得像

onPause - > onNewIntent - >的onResume

将应用程序单独保留一天或可能一小时后,当我尝试转到活动A并扫描nfc标记时,它将表现得像

onPause - > onNewIntent - > onResume - > onPause - > onCreate - >的onResume。

最后3个步骤出现严重问题。我认为它应该在onNewIntent ??

之后停在onResume中

无论是杀死应用程序,从Android任务列表中清除,也无法解决问题直到应用程序卸载并重新安装。它不仅仅发生在一个特定的设备上,它发生在我的大多数设备上。

想知道如何解决这个问题,或者是否有任何解决方法。非常感谢。

以下是我的代码:

活动A

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.adapter = NfcAdapter.getDefaultAdapter(this);
    IntentFilter intentFilter = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
    techLists = new String[][] {
            new String[] {
                    NfcF.class.getName()
            }
    };
    intentFiltersArray = new IntentFilter[] { intentFilter };
    this.pendingIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, ((Object) this).getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}

@Override
protected void onPause() {
    if (this.adapter != null) {
        this.adapter.disableForegroundDispatch(this);
    }
    super.onPause();
}

@Override
protected void onResume() {
    if (this.adapter != null) {
        this.adapter.enableForegroundDispatch(this, this.pendingIntent, intentFiltersArray, this.techLists);
    }
    super.onResume();
}

清单

<activity
    android:name=".ActivityA"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

1 个答案:

答案 0 :(得分:1)

你打电话给这个

super.onResume();

之前

if (this.adapter != null) {
        this.adapter.enableForegroundDispatch(this, this.pendingIntent, intentFiltersArray, this.techLists);
    } 

再次检查