2 votes

Après avoir appelé le scanner zxing, je retourne à mon activité mais dans une nouvelle instance.

J'utilise la bibliothèque zxing-Android-embedded dans mon application Android. Avant d'appeler la méthode initiateScan() pour lancer le scanner à partir de mon activité, je définis une variable de classe scanedItemId pour savoir sur quel élément j'ai cliqué pour le scanner.

Mon problème est que lorsque l'activité du scanner est terminée, elle retourne à mon activité, mais dans une nouvelle instance et non dans l'instance initiale (j'ai vérifié avec un point d'arrêt dans la méthode onCreate). Ma variable de classe est donc nulle. Que puis-je faire pour garder mon instance d'activité initiale vivante et m'assurer que le scanner y retourne ?

public class MyActivity
[...]
scanedItemId = currentItem.id // The current item where we clicked on.
IntentIntegrator qrCodeScanner = new IntentIntegrator(this);
qrCodeScanner.setOrientationLocked(false);
qrCodeScanner.initiateScan();
[...]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case IntentIntegrator.REQUEST_CODE:
            // Here the scanedItemId is always null.
[...]
```

2voto

David Wasser Points 23169

Vous avez demandé :

Que puis-je faire pour que mon instance d'activité initiale reste active et pour m'assurer que que le scanner y retourne ?

Vous ne pouvez pas. Lorsque votre application passe en arrière-plan et que l'application scanner a besoin de ressources, Android tue votre application pour mettre les ressources à la disposition de l'application scanner. C'est normal et votre application doit être suffisamment robuste pour y faire face. Si vous avez besoin de garder une trace de l'état de votre application afin de pouvoir continuer lorsque votre application revient au premier plan, alors vous devez enregistrer ces informations dans un endroit persistant. Vous avez le choix :

  • Préférences partagées
  • Base de données SQLite
  • Utiliser un fichier
  • Mettre en œuvre onSaveInstanceState()

1voto

syntiz Points 75

Suite à ce que @David a dit, j'ai implémenté la solution "onSaveInstanceState()" qui fonctionne bien : Je viens d'ajouter ceci dans mon activité :

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt("scanedItemIdKey", scanedItemId);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    scanedItemId = savedInstanceState.getInt("scanedItemIdKey");
}

Gracias

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X