Autore Topic: Activity & FragmentActivity  (Letto 317 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 337
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Activity & FragmentActivity
« il: 27 Giugno 2014, 10:59:52 CEST »
0
Ho tutte le Activity che estendono una mia classe CustomActivity modificata; quest'ultima all'interno ha un IntentFilter:

Codice (Java): [Seleziona]
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
L'intenzione è quella di far ereditare il comportamento a tutte le Activity, e così accade. ;)

Ho però una FragmentActivity per richiamare le mappa; ovviamente la MapActivity estendendo FragmentActivity invece della mia CustomActivity non ha ereditato il comportamento che desidero.
C'è modo di dirgli di ereditare anche il comportamento della mia CustomActivity o devo replicare la parte di codice che gestisce l'IntentFilter (onNewIntent(), etc)?

Grazie.


iClaude

  • Visitatore
Re:Activity & FragmentActivity
« Risposta #1 il: 29 Giugno 2014, 19:57:06 CEST »
0
Anzichè una classe astratta potresti utilizzare un'interfaccia da far implementare a tutte le classi che devono ereditare quel comportamento.

Offline wlf

  • Utente normale
  • ***
  • Post: 337
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Activity & FragmentActivity
« Risposta #2 il: 30 Giugno 2014, 10:08:29 CEST »
0
Anzichè una classe astratta potresti utilizzare un'interfaccia da far implementare a tutte le classi che devono ereditare quel comportamento.

Perdonami ma non ho mai avuto l'occasione di scrivere un interfaccia; ho provato quindi ma ho alcuni dubbi. ;)
Nell'interfaccia posso anche sovrascrivere la onCreate, onResume, onPause, etc come faccio in una classe astratta?

Codice (Java): [Seleziona]
public interface MyInterface {
        //Nfc
        public NFCForegroundUtil nfcForegroundUtil = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                //NFC
                nfcForegroundUtil = new NFCForegroundUtil(this);
        }
       
        @Override
        public void onResume() {
            super.onResume();
           
                //NFC
                if (MainActivity.NFC_SET && nfcForegroundUtil.getNfc() != null) {
                        nfcForegroundUtil.enableForeground();
                    if (!nfcForegroundUtil.getNfc().isEnabled()) {
                        Toast.makeText(getApplicationContext(), getResources()
                                        .getString(R.string.erroreNfc), Toast.LENGTH_LONG).show();
                        startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
                    }                  
                }
        }

        @Override
        public void onPause() {
            super.onPause();               
                //Faccio fuori l'NFC listener
            if (nfcForegroundUtil.getNfc() != null && nfcForegroundUtil.getNfc().isEnabled()) {
                        nfcForegroundUtil.disableForeground();
            }
        }

        //NFC
        public void onNewIntent(Intent intent) {
                Log.d(this.getClass().getSimpleName(), "onNewIntent ");
               

                Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

                if (!MainActivity.NFC_SET || tag == null ||
                                this.getClass().getSimpleName().equals("PippoActivity") ||
                                this.getClass().getSimpleName().equals("PipperoActivity")) {
                        return;
                }
               
            StringBuilder sb = new StringBuilder();
            String[] myArray = tag.getTechList();
           
            for (int i = 0;i < myArray.length; i++) {
                 sb.append(myArray[i]);
                 sb.append("\n");
            }
                   
            NdefMessage[] messages = null;
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMsgs != null) {
            messages = new NdefMessage[rawMsgs.length];
            for (int i = 0; i < rawMsgs.length; i++) {
                messages[i] = (NdefMessage) rawMsgs[i];
            }
        }              
       
        if(messages[0] != null) {
                String btMac = "";
                String androidPkg = "";
                for (int i = 0;i < messages[0].getRecords().length; i++) {
                String resultType="";                  
                byte[] type = messages[0].getRecords()[i].getType();
                for (int y = 0; y < type.length; y++) {
                    resultType += (char) type[y];
                }              
               
                String resultPayload="";
                byte[] payload = messages[0].getRecords()[i].getPayload();
                for (int y = 0; y < payload.length; y++) {
                    resultPayload += (char) payload[y];
                }
                if (resultType.equals("android.com:pkg")){
                        androidPkg = resultPayload;
                }
                if (resultType.equals("text/plain")){
                        btMac = resultPayload;
                }                
            }

                if (androidPkg.equals(getApplicationContext().getPackageName()) &&
                                MainActivity.APP_MODE.equals("1")) {
                    if (btMac.length() > 0) {
                                // Intent per passaggio alla PippoActivity
                                Intent myIntent = new Intent(this, PippoActivity.class);
                                myIntent.putExtra("btdevice", btMac);
                                startActivityForResult(myIntent, MainActivity.RESULT_INTENT);                              
                    } else {
                                // Intent per passaggio alla PipperoActivity
                                Intent myIntent = new Intent(this, PipperoActivity.class);
                                startActivityForResult(myIntent, MainActivity.RESULT_INTENT);
                    }
                }
        }
        }
}