Skocz do zawartości
matej1410

Powrót do aktywności sprzed skanowaniem NFC

    Rekomendowane odpowiedzi

    działa, no nie wiem jak mam dziękować :-)!

    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    3 minuty temu, matej1410 napisał:

    działa, no nie wiem jak mam dziękować :-)!

    Wystarczy że częściej będziesz pisał na tym forum :) Z niecierpliwością czekam na nowe problemy do rozwiązania ;) 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)
    
    package com.example.komputer007.skanernfc;
    
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.nfc.NfcAdapter;
    import android.nfc.Tag;
    import android.nfc.tech.MifareUltralight;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast;
    
    import java.io.IOException;
    
    public class MainActivity extends AppCompatActivity {
    
        private NfcAdapter nfcAdapter;
        PendingIntent mPendingIntent;
        byte[] tablica_odczytane01  = new byte[16];
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
                    getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    
            Log.d("intencje", "onCreate");
            nfcAdapter = NfcAdapter.getDefaultAdapter(this);
            if (nfcAdapter == null) {
                Toast.makeText(this, "Urządzenie nie wspiera NFC", Toast.LENGTH_LONG).show();
                finish();
            } else if (!nfcAdapter.isEnabled()) {
                Toast.makeText(this, "NFC wyłączone, włącz NFC", Toast.LENGTH_LONG).show();
            }
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            nfcAdapter.disableForegroundDispatch(this);
        }
    
        @Override
        protected void onNewIntent(Intent intent){
    
    
            Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            MifareUltralight ultralight = MifareUltralight.get(tag);
    
            try {
                ultralight.connect();
    
                tablica_odczytane01=ultralight.readPages(4);
                Log.d("odczytano","sukces!");
    
                ultralight.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }

    Podsumowując. Tak powinien wyglądać kod rozwiązujący problem.

    Dla przypomnienia zagwozdką była otwierająca się w nowym okienku kopia MainActivity po zbliżeniu taga do smartfona.

    Dzięki klasie PendingIntent możemy niejako wyłapać "zbliżenie taga" w taki sposób aby nie wchodzić w OnCreate() tylko w onNewintent().

    W ten sposób działamy cały czas w obrębie jednego i tego samego okienka aktywności MainActivity a wszelkie dane z taga odczytujemy i np. wyświetlamy je w metodzie onNewIntent. 

    Nie można zapomnieć o nadpisaniu metod:

    onPAuse() oraz onResume() zgodnie z tym co zamieściłem wyżej.

    Szczególne podziękowania dla Coders Lab oraz mmaciejow.

    Temat do zamknięcia ?

    Edytowane przez matej1410

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x