2011-03-15 3 views
1

Merci d'avance pour votre aide. Je suis encore très nouveau avec Android et dans le monde de la programmation, et je cherchais un peu de conseils. J'essaie d'avoir un message texte écouté, puis démarrer un service pour exécuter en arrière-plan. Je sais que le Broadcast Receiver fonctionne parce que j'ai une notification Toast lorsque je l'envoie à l'émulateur, mais c'est tout. Je ne reçois rien après cela du Toast que j'ai dans le service.Le récepteur de diffusion ne démarre pas Service

Voici mon récepteur de radiodiffusion

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

public class MyBroadcastReceiver extends BroadcastReceiver { 
protected String className = this.getClass().getName(); 
protected int toastLength = Toast.LENGTH_SHORT; 

@Override 
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++) { 
     smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 

    // show first message 
    Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); 
    toast.show(); 
    Intent serviceIntent = new Intent(context, MyService.class); 
    serviceIntent.setAction("SMS.example.MyService"); 
    context.startService(serviceIntent); 
    } 
} 

Je reçois la notification de pain grillé à la pop, mais il ne démarre pas le service après un texte reçu. Voici le code pour le service:

public class MyService extends Service { 
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
BroadcastReceiver SMSReceiver = new BroadcastReceiver(){ 
protected String className = this.getClass().getName(); 
protected int toastLength = Toast.LENGTH_SHORT;  

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, className, toastLength).show(); 
     Log.i("INCOMINGSMSRECEIVER", intent.getAction()); 

     if (intent.getAction().equals(SMS_RECEIVED)) { 
      SmsManager sms = SmsManager.getDefault(); 

      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       SmsMessage[] messages = new SmsMessage[pdus.length]; 
       for (int i=0; i<pdus.length; i++) 
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 

       for (SmsMessage message : messages) { 
        String msg = message.getMessageBody(); 
        String to = message.getOriginatingAddress(); 
        //sms.sendTextMessage(to, null, "Got It" + msg, null, null); 
        Log.i("INCOMINGSMSRECEIVER", "SMS received."); 

       } 
      } 
     }   
    } 
}; 

    //@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(); 

    Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show(); 
    IntentFilter filter = new IntentFilter(SMS_RECEIVED);  
    registerReceiver(SMSReceiver, filter); 

} 
} 

Désolé pour tout le code, je veux juste vous donner toutes les informations. Enfin voici le Mainfest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="SMS.example" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<application android:icon="@drawable/icon" android:label="@string/app_name">  
<receiver android:name=".MyBroadcastReceiver" android:enabled="true"> 
    <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
<service android:name=".MyService" android:enabled="true"> 
    <intent-filter> 
     <action android:name="SMS.example.MyService" />  
    </intent-filter> 
</service>  

Quelqu'un peut-il s'il vous plaît me dire pourquoi mon service n'est pas commencé?

Répondre

0

Je pensais que je garderais ce code pour les autres, mais j'ai compris le problème. Je n'ai pas eu le toast apparaître pour le onCreate(), mais la méthode onStart() fera apparaître un toast! J'espère que cela aide les autres.

Questions connexes