私は、フォアグラウンドディスパッチ動作に厄介な問題があります。場合によってはonNewIntent()
に電話する代わりに、アクティビティを完全に再作成して、アプリケーションのワークフローを破ります。AndroidのNFCフォアグラウンドディスパッチシステムにバグがありますか?
具体的な状況:アクティビティAは、フォアグラウンドディスパッチを使用するMainActivityです。すべてが必要なように機能します。しかし、ブラウザから起動される私のアクティビティB(VIEWアクション)では、フォアグラウンドディスパッチは、いくつかの状況ではもう機能しません。
ワークフロー:
私は、MainActivityは、( MainActivityを閉じず)、ブラウザに切り替えて起動し、起動アクティビティ・Bと私のNFCデバイスを接続 - >それ が新しいアクティビティを作成し、 B.
MainActivityを開始してもう一度閉じます。その後、私は、ブラウザに
を切り替える発射活動Bと私のNFCデバイスを接続 - > すべてがonNewIntent()
で動作するコードは、例えば、正しいです最初のシナリオでNFCデバイスを2回接続すると、2回目と同じように動作しますが、初めて動作しません。 MainActivityとBアクティビティでは、アクティビティのonPause()メソッドでdisableForegroundDispatch()メソッドを確実に呼び出します。
私の特定の問題の解決策はありますか?私にとってはバグのように思える。
編集:
public void resume(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
// nfc is the default NFC adapter and never null on my devices
Intent intent = new Intent(targetActivity, targetActivity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(targetActivity, 0, intent, 0);
nfc.enableForegroundDispatch(targetActivity, pendingIntent, null, new String[][] { new String[] { IsoDep.class.getName() } });
}
}
public void pause(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
nfc.disableForegroundDispatch(targetActivity);
}
}
これらの方法は、各アクティビティに対応する方法で呼び出されます。助けてくれてありがとう!
ソリューション:非常に長い研究の後、私はついにこの問題を発見しました。ログカード印刷:
- startActivityは非アクティビティコンテキストから呼び出されました。 Intent.FLAG_ACTIVITY_NEW_TASK for:Intent
NotificationoverManagerで同じ問題が発生していたStackoverflowで他の問題が見つかりましたが、すべてのヒントが私を助けませんでした。私の活動BにフラグsingleTaskを追加することは私のためのトリックでしたが、文脈は常に活動であるため、正直言って理解できません。
MainActivityからすべてのコードを削除しましたが、最初のシナリオはまだ機能しませんでした。私はマニフェストからMainActivityを浪費し、それ以降はすべてうまくいった。アプリケーションインスタンスが実行されていて、アクティビティBがブラウザから起動されていることが問題なのでしょうか?知りません。
とにかく、NFCの助けを借りてくれてありがとう!
作成した「PendingIntent」のコードを表示してください。 –
私はそれを追加しました。前もって感謝します。 – vRallev
私は同じ問題を抱えていました...私はあなたにSingleTaskメソッドを使って解決しました。私はまた、その解決策にはあまり満足していません。あなたはそれを解決する別の方法を見つけましたか? 、> – david