2011-03-15 168 views
1

非常感谢您的帮助。我对Android和编程界还是很新的,并且正在寻找一些指导。我试图让一条文本消息被监听,然后启动一个服务在后台运行。我知道广播接收器正在工作,因为当我向模拟器发送文本时,弹出了Toast通知,但就是这样。此后我从服务中得到的吐司中没有收到任何东西。广播接收器未启动服务

这里是我的广播接收器

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); 
    } 
} 

我得到的Toast通知弹出,但收到的文本之后,在没有启动该服务。下面是服务的代码:

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); 

} 
} 

对不起,所有的代码,只是想给你们的所有信息。最后这里是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>  

谁能告诉我,为什么没有被开始了我的服务?

回答

0

我以为我会保留这些代码给其他人,但我找到了问题。我没有为onCreate()弹出干杯,但onStart()方法会弹出一个干杯!希望这有助于他人。