La intención pendiente siempre hace una nueva actividad

Estoy tratando de hacer una aplicación con función nfc. el problema es cuando se descubre la etiqueta nfc, la intención pendiente siempre crea una nueva actividad que ya existe. Estoy usando la pestaña host. cómo hacer una pendiente pendiente sin hacer una nueva actividad. muchas gracias.

 public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);        

            mNfcAdapter = NfcAdapter.getDefaultAdapter(this);                              
            mNfcPendingIntent = PendingIntent.getActivity(this, 0,new Intent(this,
    getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    }

    protected void onResume() {    
            super.onResume();
            mResumed = true;               
            // Sticky notes received from Android
            if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {            
                NdefMessage[] messages = getNdefMessages(getIntent());
                byte[] payload = messages[0].getRecords()[0].getPayload();            
                try     { cekNfc(new String(payload)); }
                catch (SQLException e)          { e.printStackTrace(); } 
                catch (NoSuchAlgorithmException e)      {  e.printStackTrace(); }
                catch (UnsupportedEncodingException e)  { e.printStackTrace(); }

                setIntent(new Intent());
            }
            enableNdefExchangeMode();        
        }   
        private void enableNdefExchangeMode() { mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null); } 

    NdefMessage[] getNdefMessages(Intent intent) {  // Parse the intent             
            NdefMessage[] msgs = null;        
            String action = intent.getAction();
            //jika ada action
            if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {                      
                Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
                if (rawMsgs != null) {
                    msgs = new NdefMessage[rawMsgs.length];
                    for (int i = 0; i < rawMsgs.length; i++) {  msgs[i] = (NdefMessage) rawMsgs[i]; }
                }
            } 
            return msgs;
        }


 public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);        

            mNfcAdapter = NfcAdapter.getDefaultAdapter(this);                              
            mNfcPendingIntent = PendingIntent.getActivity(this, 0,new Intent(this,
    getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    }

    protected void onResume() {    
            super.onResume();
            mResumed = true;               
            // Sticky notes received from Android
            if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {            
                NdefMessage[] messages = getNdefMessages(getIntent());
                byte[] payload = messages[0].getRecords()[0].getPayload();            
                try     { cekNfc(new String(payload)); }
                catch (SQLException e)          { e.printStackTrace(); } 
                catch (NoSuchAlgorithmException e)      {  e.printStackTrace(); }
                catch (UnsupportedEncodingException e)  { e.printStackTrace(); }

                setIntent(new Intent());
            }
            enableNdefExchangeMode();        
        }   
        private void enableNdefExchangeMode() { mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null); } 

    NdefMessage[] getNdefMessages(Intent intent) {  // Parse the intent             
            NdefMessage[] msgs = null;        
            String action = intent.getAction();
            //jika ada action
            if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {                      
                Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
                if (rawMsgs != null) {
                    msgs = new NdefMessage[rawMsgs.length];
                    for (int i = 0; i < rawMsgs.length; i++) {  msgs[i] = (NdefMessage) rawMsgs[i]; }
                }
            } 
            return msgs;
        }
Respuesta 1

Ponga android:launchMode="singleTask"para su actividad (o actividades) en el manifiesto. Eso hace el truco. Cada vez que el sistema envía una intención NFC, siempre se creará una nueva Actividad. Esto es único para los intentos de NFC. Por lo tanto, la configuración android:launchMode="singleTop"no funcionará, ni la configuración de banderas en el PendingIntent.

Otra solución es usar NfcAdapter.enableForegroundDispatch () en todas sus actividades. De esa manera, su aplicación puede manejar todos los intentos de NFC directamente (a través de onNewIntent()).

Respuesta: 2

Prueba esto:

mNotificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Y en tu manifiesto:

android:launchMode="singleTask"
Respuesta: 3

Cree su intención pendiente de la siguiente manera:

PendingIntent.getActivity(this, 0,new Intent(this,
    getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
    |Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
    |Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0);
Respuesta: 4

puede usar el indicador "PendingIntent.FLAG_UPDATE_CURRENT" mientras llama al método "getActivity". Lo uso sin problemas.

Respuesta: 5

use esta bandera en su lugar ...

new Intent(this,
    getClass()).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
Respuesta: 6

Estoy haciendo un juego simple de igual a igual y decidí usar XML para enviar información a través de sockets (ejemplo a continuación). ¿Pero no estoy seguro de cómo enviarlo? Simplemente debería usar ObjectOutputStream.writeObject (obj) ...

Intento generar automáticamente un constructor de copia con IntelliJ, pero no puedo seleccionar esto debido a que el cuadro está gris. ¿Cómo genero automáticamente un constructor de copias por IntelliJ? Mi clase de Java ...

He almacenado 111 millones de pares clave-valor (una clave puede tener múltiples valores - máximo 2/3) cuya clave son enteros de 50 bits y los valores son enteros de 32 bits (máximo). Ahora, mis requisitos son: Rápido ...

Estoy usando Pdfbox para dibujar una línea en mi documento. Código: contentStream.drawLine (startX, startY, startX, endY); El resultado es una línea recta. Me pregunto ¿PdfBox puede dibujar líneas punteadas?