2010-08-06 8 views
0

J'essaie d'obtenir ce code pour fonctionner sur ma Dell Streak mais quand je reçois un SMS, je n'ai toujours pas de notification Toast ... J'ai ajouté la balise 'receive' dans le fichier manifest.xml ... Je suis un noob complet à ce besoin et un peu d'aide pour commencer :)Android + SMS Récepteur + Toast = FAIL

package net.learn2develop.SMSMessaging; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();  
     SmsMessage[] msgs = null; 
     String str = "";   
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];   
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);    
       str += "SMS from " + msgs[i].getOriginatingAddress();      
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n";  
      } 
      //---display the new SMS message--- 
      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     }       
    } 
} 

Répondre

1

Vous ne devez pas créer Toast s à partir de composants non-UI. Vous devez uniquement créer Toast s à partir de Activity s. La raison pour laquelle le Toast ne s'affiche pas est que le BroadcastReceiver ne fonctionne pas sur un thread avec un Looper et Toast en dépend, entre autres choses qui sont configurés pour un thread d'interface utilisateur. Notifications sont destinés aux composants non-UI pour notifier l'utilisateur.