2016-09-01 2 views
0

Ich habe ein Problem, dass ich keine Lösung für diese Website gefunden habe, aber wenn dies eine doppelte Frage ist, entschuldige ich mich.Android Intent Wiedereröffnung Aktivität

Ich entwickle eine Anwendung, die als ein Terminal für die Registrierung, wenn Mitarbeiter starten/beenden arbeiten, neben vielen anderen Dingen. So wie es funktioniert, scannen sie mit NFC ihre NFC-Karten und meine App liest sie und sendet schließlich die entsprechenden Informationen an den Server.

Wenn die App jedoch bereits geöffnet ist (sie sollte ständig geöffnet sein, dies ist also ein Problem) und eine NFC-Karte gescannt wird, wird die App erneut geöffnet. Natürlich geschieht dies, weil ich es so im Manifest festgelegt habe. Aber ich kann nicht einen Weg finden, meinen App empfängt die NFC-Scan Absicht haben, wenn ich alle diese Zeilen im Manifest nicht hinzufügen:

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

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

ich versucht habe, nur ohne das Schreiben, aber in diesem Fall tut es nicht lese die Karte, aber stattdessen erscheint die Programmauswahl auf dem Telefon, oder wenn das Telefon keine passende App hat, heißt es einfach "NFC read error".

Hat jemand eine Lösung dafür? Dies ist der letzte Schritt in meinem Projekt, und ich hatte große Schwierigkeiten damit und würde jede Hilfe zu schätzen wissen. Es ist wahrscheinlich etwas Einfaches, das ich gerade nicht sehe, aber ich würde es so oder so schätzen.

+0

Haben Sie versucht, android: launchMode = „SingleInstance“ gesetzt unter Tätigkeit in einem offenkundigen –

+0

Ja, ich habe, aber ich habe nicht die überschriebenen OnNewIntent Methode hinzufügen, und dass behebt das Problem so, wie ich es wollte. – OliveraP

+0

intent.getAction(). Equals (NfcAdapter.ACTION_TAG_DISCOVERED) hat es für mich erfolgreich überprüft. @RaviGadipudi – OliveraP

Antwort

1

Android-Aktivitäten haben unterschiedliche Startmodi. Wenn Sie eine einzelne Instanz festlegen, verwendet sie bereits geöffnete Aktivitäten und erstellt keine neue Aktivität. Sie können onNewIntent()

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

For various activity elements

+0

Genau das habe ich gebraucht, danke! Wenn es Ihnen nichts ausmacht, mir zu sagen, wie stelle ich sicher, dass die Absicht die NFC war? Und nicht zum Beispiel der, wo ich diese Aktivität von einem anderen geöffnet habe? – OliveraP

+0

suchen Sie nach intent.getAction() und es sollte mit Ihrer "android.nfc.action.TAG_DISCOVERED" übereinstimmen. Lassen Sie mich wissen, ob diese Lösung nicht funktioniert hat. Ich helfe dir, indem ich tief in sie hineinschaue. –

+1

nette Antwort und Referenz –

0

Sie können die neue Absicht in Überschreibung Methode lesen verwenden broadcastReceiver, - zuerst den Empfänger auf Ihre Aktivität

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); 


      } 


     } 
    }; 
  • zweite Register die Übertragung initiieren

    registerReceiver (notificationBroadcastReceiver, intentFilter);

  • Am Ende austragen zu der Sendung in der onDestroy Methode

    @Override Leere onDestroy geschützt() {

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

    }

danach statt intenting Aktivität zu tun Sie können Broadcast senden()

eine kleine Anleitung: https://developer.android.com/reference/android/content/BroadcastReceiver.html

hoffen, dass es hilfreich sein wird

Verwandte Themen