onBroadcastReceiver在后台工作吗?

问题描述:

我有一个汽车回复短信应用程序。该功能是,当短信到来时,应用程序会自动向发件人回复一条繁忙的消息。 我也创建一个活动。在此活动中,我有一个broadcastReceiver方法,当短信到来时,此方法使用MessageManager发送结果短信。但它似乎像这个应用程序不能在后台工作。我需要做什么。onBroadcastReceiver在后台工作吗?

这里是我使用的代码:

public class AutoReplySMSliteActivity extends Activity { 

    //-----------------------------------------------------RECEIVER LISTENER---------------------------------------------- 
    //Create auto- reply 
    private void sendSMS(String cellNo, String msg) 
    { 
     SmsManager sender = SmsManager.getDefault(); 
     sender.sendTextMessage(cellNo, null, msg, null, null); 
    } 

    //Setup sender number which is got from receiver 
    IntentFilter intentFilter; 

    private BroadcastReceiver intentReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

    }; 

    //-------------------------------------------------------onCreate METHOD----------------------------------------------------------- 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     //Setup broadcast receiver 
     intentFilter = new IntentFilter(); 
     intentFilter.addAction("SMS_RECEIVED_ACTION"); 
     registerReceiver(intentReceiver, intentFilter); 




} 
在androidmanifest

,我有一个接收器:

<receiver android:name=".SMSReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 

这就是我的接收器类:

public class SMSReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    //Get the sender phone number and bind to string str 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = ""; 
    if (bundle != null) { 
     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 += msgs[i].getOriginatingAddress(); 
     } 
     Log.i("SMSReceiver", "Sender number receives: " + str); 

     //Send broadcast str to ListReceiver to compare 
     Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction("SMS_RECEIVED_ACTION"); 
     broadcastIntent.putExtra("sms", str); 
     context.sendBroadcast(broadcastIntent); 
     Log.i("SMSReceiver", "Broadcast data...."); 
    } 
} 

} 

我想你当消息到达时需要调用Service。您应该将所有功能移至服务。所以它也在后台运行。

+0

它是一个文件来使用视图服务 – detno29 2012-02-11 13:07:35

+0

服务中的“背景”,但仍对应用程序的UI线程中运行。要真正在后台运行进程,您应该使用IntentService,或者如果这不是选项,则可以使用Runnable。 – MattC 2012-10-04 14:52:02