Autore Topic: Aggiornare UI tramite BroadcastReceiver  (Letto 2986 volte)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Aggiornare UI tramite BroadcastReceiver
« il: 26 Ottobre 2010, 23:25:44 CEST »
+1
Ecco un modo particolare per aggiornare la UI.

Codice (Java): [Seleziona]
package ch.egsolutions.uwd;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;

public class Demo extends Activity {

        static final String UPDATE_UI_ACTION = "ch.egsolutions.uwd.updateui";
        TextView tv;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                tv = (TextView) findViewById(R.id.myTv);
                registerReceiver(updateUiReceiver, new IntentFilter(UPDATE_UI_ACTION));

                Timer t=new Timer();
                TimerTask tt=new TimerTask() {
                        Intent i=new Intent(UPDATE_UI_ACTION);
                        @Override
                        public void run() {
                               
                                i.putExtra("updatedString", ""+new Date().toLocaleString());                           
                                sendBroadcast(i);
                               
                        }
                };
               
                t.scheduleAtFixedRate(tt, 0, 1000);

        }

        private final BroadcastReceiver updateUiReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                        tv.setText(intent.getStringExtra("updatedString"));

                }
        };

       @Override
        public void onDestroy() {
                 unregisterReceiver(updateUiReceiver);
                 super.onDestroy();
       }
}


Nota: Non usare per update ad alta frequenza: 1 update = 1 messaggio di broadcast



Saluti.
Qlimax
« Ultima modifica: 26 Ottobre 2010, 23:45:00 CEST da Qlimax »

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Aggiornare UI tramite BroadcastReceiver
« Risposta #1 il: 29 Ottobre 2010, 20:30:32 CEST »
0
scusate, ho un altro problemino :)

broadcast receiver filtrato su android.provider.Telephony.SMS_RECEIVED:

Codice (Java): [Seleziona]
public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();

        Object pdus[] = (Object[]) bundle.get("pdus");

        SmsMessage smsMessage[] = new SmsMessage[pdus.length];

        for (int n = 0; n < pdus.length; n++) {
                byte[] pdu = (byte[]) pdus[n];

                if (pdu != null) {
                        smsMessage[n] = SmsMessage.createFromPdu(pdu);

                        // some more code...
                }
        }
}

come mai (credo solo in caso di messaggi superiori a 160 caratteri e quindi splittati) mi capita di ricevere un pdu null?
sono costretto a fare il controllo esplicitamente, altrimenti viene sollevata un'eccezione.

lo domando perché in giro ho trovato solo codice che si preoccupa del valore del bundle e non del pdu... o_O

grazie mille! :)

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Aggiornare UI tramite BroadcastReceiver
« Risposta #2 il: 05 Novembre 2010, 09:04:42 CET »
0
suggerimenti? :)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Aggiornare UI tramite BroadcastReceiver
« Risposta #3 il: 05 Novembre 2010, 10:32:45 CET »
0
apri un post di supporto tecnico. questo, come puoi vedere, è uno snippet

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Aggiornare UI tramite BroadcastReceiver
« Risposta #4 il: 05 Novembre 2010, 10:35:54 CET »
0
certamente.
ho pensato che potesse andare bene per evitare ridondanza :)

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Aggiornare UI tramite BroadcastReceiver
« Risposta #5 il: 23 Settembre 2011, 13:37:01 CEST »
0
Molto utile lo snippet. Io vorrei farlo senza inner class, e' possibile? Perche' per ora le view con cui cerco di interagire sono null, sembra che le perdo da qualche parte.

Grazie
I numeri contano molto di più del seme.