2016-09-01 1 views
0

J'ai un problème auquel je n'ai pas trouvé de solution sur ce site, mais s'il s'agit d'une question en double, je m'en excuse.Android Intention de réouverture de l'activité

Je développe une application qui sert de terminal pour l'enregistrement lorsque les employés commencent/finissent le travail, entre autres choses. La façon dont cela fonctionne est qu'avec NFC allumé, ils scannent leurs cartes NFC et mon application les lit et envoie finalement les informations appropriées au serveur.

Cependant, si l'application est déjà ouverte (elle est censée être ouverte en permanence, c'est donc un problème) et qu'une carte NFC est scannée, elle rouvre l'application. Bien sûr, cela est fait parce que je l'ai mis ainsi dans le manifeste. Mais je ne peux pas trouver un moyen d'avoir mon application recieve l'intention de balayage NFC si je ne fais pas toutes ces lignes dans le manifeste:

<intent-filter> 
      <action android:name="android.nfc.action.TAG_DISCOVERED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

J'ai essayé en train d'écrire sans mais dans ce cas, il ne fonctionne pas Lire la carte, mais à la place le sélecteur de programme apparaît sur le téléphone, ou si le téléphone n'a pas une application appropriée, il dit simplement "NFC read error".

Quelqu'un at-il une solution pour cela? C'est la dernière étape de mon projet, et j'ai eu beaucoup de problèmes avec cela, et j'apprécierais toute aide. C'est probablement quelque chose de simple que je ne vois pas, mais je l'apprécierais de toute façon.

+0

Avez-vous essayé android: launchMode = « SingleInstance » mis en activité dans –

+0

manifeste Oui, je l'ai fait, mais je n'ajoute la méthode surchargée de OnNewIntent, et que résolu le problème comme je le voulais. – OliveraP

+0

intention.getAction(). Égal à (NfcAdapter.ACTION_TAG_DISCOVERED) l'a vérifié pour moi avec succès. @RaviGadipudi – OliveraP

Répondre

1

Les activités Android ont des modes de lancement différents. Si vous définissez une instance unique, elle utilisera une activité déjà ouverte et ne crée pas une nouvelle activité. Vous pouvez lire la nouvelle intention dans la méthode de remplacement onNewIntent()

protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    // read intent values here 
} 

For various activity elements

+0

C'est exactement ce dont j'avais besoin, merci! Si cela ne vous dérange pas de me le dire, comment puis-je m'assurer que l'intention était la NFC? Et pas par exemple celui où j'ai ouvert cette activité d'un autre? – OliveraP

+0

Recherchez "intention.getAction()" et "android.nfc.action.TAG_DISCOVERED". Faites-moi savoir si cette solution n'a pas fonctionné. Je t'aide en regardant en profondeur. –

+1

belle réponse et référence –

0

Vous pouvez utiliser BroadcastReceiver, - d'abord lancer le récepteur à votre activité

IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("whateveryouwant"); 

    notificationBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
// here you can read the intent and customize the action; 
      int usage = intent.getIntExtra("usage",1000); 


      } 


     } 
    }; 
  • deuxième registre de la diffusion

    registerReceiver (notificationBroadcastReceiver, intentionFilter);

  • À la fin désinscription à la diffusion dans la méthode OnDestroy

    @Override {

    if(notificationBroadcastReceiver != null){ 
    
        unregisterReceiver(notificationBroadcastReceiver); 
        notificationBroadcastReceiver = null; 
    } 
    super.onDestroy(); 
    

    }

OnDestroy protected void() après avoir fait qu'au lieu d'activité intenting vous pouvez envoyerBroadcast()

un petit guide: https://developer.android.com/reference/android/content/BroadcastReceiver.html

espère que ce sera helpfull