Autore Topic: Intent in un BroadcastReceiver  (Letto 1113 volte)

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Intent in un BroadcastReceiver
« il: 02 Febbraio 2011, 19:57:01 CET »
0
Ciao a tutti,
ho creato una applicazione che non appena viene ricevuto un sms si avvia...l'unico problema è che dovrei prendere i dati contenuti in questo messaggio inviato e passarli alle altre activity. Ho provato ad utilizzare gli intent nella classe del BroadcastReceiver ma non ha funzionato poi ho provato ad utilizzarli nella classe che identifica la mia Activity principale ma anche in questo caso niente...
Nel primo caso non mi dava errore mentre nel caso dell'activity mi da NullPointerException..vi posto le due activity:
Codice (Java): [Seleziona]
public class MyBroadcastReceiver extends BroadcastReceiver {  
    public double latRic;
    public double lonRic;
   public void onReceive(Context context, Intent intent) {            
             Bundle bundle = intent.getExtras();
             Object messages[] = (Object[]) bundle.get("pdus");          
             SmsMessage smsMessage[] = new SmsMessage[messages.length];          
             for (int n = 0; n < messages.length; n++)
                 // Creo l'array dei messaggi
                smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
             // Ottengo il testo dell'ultimo messaggio
             String sms=smsMessage[0].getMessageBody();
             String l="***";
             int x=7;
             String s=sms.substring(0,3);                      
             for(int i=8;sms.charAt(i)!=sms.charAt(0);i++){
                x++;
              }
             String latitudine=sms.substring(7,x+1);
             String longitudine=sms.substring(x+2);                          
             latRic=Double.parseDouble(latitudine);
              lonRic=Double.parseDouble(longitudine);
             if(s.equals(l)) {                                        
                Intent myIntent = new Intent(context, RicezioneActivity.class);
                myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                myIntent.putExtra("it.compass lat",latRic);
                myIntent.putExtra("it.compass lon",lonRic);
                context.startActivity(myIntent);                
            }  
                       
                 
    }
}
Codice (Java): [Seleziona]
public class RicezioneActivity extends Activity {
        public double latRic;
        public double lonRic;
        // @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ricezione);      
        Intent myIntent=getIntent();
        String pack=getPackageName();
        // Richiamiamo i valori di lat e long della posizione da raggiungere
        latRic=myIntent.getDoubleExtra(pack+"lat",-1);
        lonRic=myIntent.getDoubleExtra(pack+"lon",-1);
  }
   
}
ci sto perdendo la testa  o_O se potete e volete aiutatemi per favore...grazie
« Ultima modifica: 03 Febbraio 2011, 10:25:38 CET da brastolfo »

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #1 il: 03 Febbraio 2011, 09:29:12 CET »
0
Proprio nessuno mi sa dire come posso traferire due valori double dal BroadcastReceiver ad un'Activity? :-(

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Intent in un BroadcastReceiver
« Risposta #2 il: 03 Febbraio 2011, 10:01:59 CET »
0
hai provato a settare gli extras relativi su myIntent, nel Boradcastreceiver?
Io non li vedo, per cui se invochi l'intent per eseguire RicezioneActivity senza passare degli extras, mi sembra normale che questa non li veda.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #3 il: 03 Febbraio 2011, 10:19:10 CET »
0
Grazie per la risposta...si l'ho modificato poco dopo adesso aggiorno il topic...però non mi prende lo stesso i valori..
Codice (Java): [Seleziona]
   if(s.equals(l)) {                                        
               Intent myIntent = new Intent(context, RicezioneActivity.class);
                myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                myIntent.putExtra("it.compass lat",latRic);
                myIntent.putExtra("it.compass lon",latRic);
                context.startActivity(myIntent);                
            }          
come posso fare?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Intent in un BroadcastReceiver
« Risposta #4 il: 03 Febbraio 2011, 10:22:36 CET »
0
scusa le domande cretine, ma devo capire meglio la situazione.
Dall'altra parte, cioè su RicezioneActivity, tu prendi questi extras?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #5 il: 03 Febbraio 2011, 10:28:19 CET »
0
Dovrei chiederti io scusa perchè non ho aggiornato il codice  ;-)
Si  prendo i valori che ho inserito nell'intent..praticamente ricevo un messaggio in cui ci sono latitudine e longitudine di una posizione estraggo dal sms questi due valori e li passo a RicezioneActivity.. scusa ancora se non sono stato chiaro  :-[
« Ultima modifica: 03 Febbraio 2011, 10:30:02 CET da brastolfo »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Intent in un BroadcastReceiver
« Risposta #6 il: 03 Febbraio 2011, 10:33:16 CET »
0
non preoccuparti.
avevo capito cosa volevi dire, avevo bisogno di capire meglio alcune cose io.

ho visto che quando passi gli extra, metti it.compass e poi lat o long, mentre quando li prendi, usi una variabile che viene inizializzata attraverso
Codice (Java): [Seleziona]
String pack=getPackageName();
2 cose in merito:
1. quando li metti nell'intent, usi uno spazio tra il package name e il nome (lat o long), che nel retrieve non usi, infatti dovrebbe essere
Codice (Java): [Seleziona]
latRic=myIntent.getDoubleExtra(pack+" lat",-1);2. sono sicuro che il problema risieda nel punto 1, ma getPackageName() restituisce it.compass?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #7 il: 03 Febbraio 2011, 10:39:31 CET »
0
Ho messo "it.compass" perchè nella classe MyBroadcastReceiver mi dà errore il comando
String s=getPackageName();
quindi per raggirare il problema ho messo direttamente il nome del package  che è "it.compass" ;-)
Se non mi sbaglio restituiva it.compass cmq ora provo a sistemare pure ciò che mi hai detto al punto 1 e e ti dico subito.

Grazie mille per l'aiuto che mi stai dando...e scusa se ti sto facendo perdere un pò di tempo  :-P

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #8 il: 03 Febbraio 2011, 10:46:20 CET »
0
Si ho provato restituisce "it.compass" ed ho tolto anche lo spazio del punto 1 ma niente continua a restituirmi -1

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Intent in un BroadcastReceiver
« Risposta #9 il: 03 Febbraio 2011, 10:51:34 CET »
+1
ok.
fai un'altra prova.
Prova a mettere delle stringhe uguali, senza usare variabili o altro, tipo "lat" e "lon" semplicemente, come nomi degli extras che passi e che ricevi.
Comunque, mi sta venendo un dubbio. Prova a rimuovere semplicemente gli spazi, per cui usa it.compass.lat e it.compass.lon.

Ah, dimenticavo. Per controllare, stampati l'intent che ti arriva, anche con un semplice System.out.println dello stesso: lo mette nel logcat comunque e dovresti vederne il contenuto, per cui controllare se i valori sono correttamente passati.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #10 il: 03 Febbraio 2011, 11:11:42 CET »
0
ok.
fai un'altra prova.
Prova a mettere delle stringhe uguali, senza usare variabili o altro, tipo "lat" e "lon" semplicemente, come nomi degli extras che passi e che ricevi.
Comunque, mi sta venendo un dubbio. Prova a rimuovere semplicemente gli spazi, per cui usa it.compass.lat e it.compass.lon.

Ah, dimenticavo. Per controllare, stampati l'intent che ti arriva, anche con un semplice System.out.println dello stesso: lo mette nel logcat comunque e dovresti vederne il contenuto, per cui controllare se i valori sono correttamente passati.

Mi sa che hai ragione...da un prima prova sembra andare  :D
Adesso controllo meglio e ti faccio sapere... Grazie ancora 

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Intent in un BroadcastReceiver
« Risposta #11 il: 03 Febbraio 2011, 11:20:16 CET »
0
Avevi ragione...era quello il problema  :D
Grazie mille per l'aiuto e la disponibilità... :D

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Intent in un BroadcastReceiver
« Risposta #12 il: 03 Febbraio 2011, 11:34:13 CET »
0
ma figurati.
;)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/