2012-02-11 64 views
0

我有一個汽車回覆短信應用程序。該功能是,當短信到來時,應用程序會自動向發件人回覆一條繁忙的消息。 我也創建一個活動。在此活動中,我有一個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...."); 
    } 
} 

} 

回答

0

我想你當消息到達時需要調用Service。您應該將所有功能移至服務。所以它也在後臺運行。

+0

它是一個文件來使用視圖服務 – detno29 2012-02-11 13:07:35

+0

服務中的「背景」,但仍對應用程序的UI線程中運行。要真正在後臺運行進程,您應該使用IntentService,或者如果這不是選項,則可以使用Runnable。 – MattC 2012-10-04 14:52:02