0

J'essaye de faire l'activité A (l'activité de lancement) qui peut avoir la fonctionnalité ci-dessous.Le feu de répartition de premier plan de NFC à la fois onCreate et onNewIntent

1. Lancez l'activité A avec la balise nfc et lisez la balise nfc après le démarrage de l'activité A.

2. Détectez l'étiquette nfc lorsque l'activité A est sur le premier plan.

Il fonctionne d'abord comme un jour. Il se comporte comme

OnPause -> onNewIntent -> onResume

Après l'application est laissé seul pendant une journée ou possible d'une heure, lorsque je tente aller à l'activité A et analyser la balise nfc, il se comporte comme

onPause -> onNewIntent -> onResume -> onPause -> onCreate -> onResume.

Énormes problèmes avec les 3 dernières étapes. Je pensais qu'il devrait s'arrêter dans le onResume après l'onNewIntent ??

Peu importe kill application, effacer de la liste des tâches Android, ne résoudra pas non plus le problème jusqu'à ce que l'application désinstalle et réinstalle. Cela n'arrive pas seulement sur un appareil particulier, cela arrive sur la plupart de mes appareils.

Aimeriez-vous savoir comment résoudre ce problème ou s'il y a du travail. Merci beaucoup.

Ci-dessous mon code:

Activité 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(); 
} 

Manifest

<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> 
+0

est 'OnDestroy()' 'avant d'être appelé onCreate()'? Si c'est le cas, vous voyez probablement une réponse à un changement de configuration. Android est en train de tuer l'activité actuelle et en créer une nouvelle pour gérer le changement de configuration. Vous pouvez empêcher cela en ajoutant 'android: configChanges =" orientation | screenSize "' à la balise '' dans le manifeste. –

Répondre

1

pouvez-vous appeler cette

super.onResume(); 

avant

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

et vérifiez à nouveau

+0

On dirait que cela ne s'est pas encore produit pour le moment. Continuera à observer le comportement. Merci. – DonutKing