2012-07-22 37 views
0

我打算在我的應用程序中發送短信。我到目前爲止這樣的代碼:如何在android上發送帶有進度的SMS消息?

private void sendMessage(String number, String message){ 

     dlg.setCancelable(false); 
     dlg.setMessage("Sending..."); 


     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(etText.getWindowToken(), 0); 

     etText.setText(""); 

     dlg.show(); 

     SmsManager sms = SmsManager.getDefault(); 

     Intent sendingIntent = new Intent(Intent.ACTION_SEND); 
     sendingIntent.putExtra("number", number); 
     sendingIntent.putExtra("message", message); 
     PendingIntent sendPI = PendingIntent.getBroadcast(this, 0, sendingIntent, PendingIntent.FLAG_ONE_SHOT); 

     sms.sendTextMessage(number, null, message, sendPI, null); 

    } 

我的收款人:

public class SMSSenderReceiver extends BroadcastReceiver { 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     int resultCode = this.getResultCode(); 

     String number = intent.getExtras().getString("number"); 
     String message = intent.getExtras().getString("message"); 

     ContentValues val = new ContentValues(); 
     val.put("address", number); 
     val.put("body", message); 

     switch(resultCode){ 

     case Activity.RESULT_OK: 

       context.getContentResolver().insert(Uri.parse("content://sms/sent"), val); 

       if (MessageListActivity.dlg != null){ 
        if (MessageListActivity.dlg.isShowing()){ 
         MessageListActivity.dlg.dismiss(); 
        } 
       } 

     } 
    } 

} 

在我的方法對我的活動:

SMSSenderReceiver receiver = new SMSSenderReceiver(); 

@Override 
public void onCreate(Bundle b){ 

    this.registerReceiver(receiver, new IntentFilter(Intent.ACTION_SEND)); 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    this.registerReceiver(receiver); 

} 

@Override 
public void onStop(){ 
super.onStop(); 
this.unRegisterReceiver(receiver); 
} 

@Override 
public void onPause(){ 
super.onPause(); 
this.unRegisterReceiver(receiver); 
} 

現在的問題是,當我發一條消息我手機屏幕上,它通過關閉對話框並在發送時將郵件放入發送框中,但當我嘗試發送郵件並立即關閉屏幕時它會發送消息,但不會關閉對話框也不會將郵件放入發送的文件夾中。我知道這與活動的生命週期有關,但我不確定如何處理onPause和onResume函數。如果我在電話關閉時沒有取消註冊接收器,那麼我收到一個錯誤,說明接收器已經泄漏了錯誤。有沒有人知道我的手機關閉時接收廣播的方式?或通過清單獲取ACTION_SEND廣播的方法?

+0

您可以嘗試在[onDestroy()]中取消註冊接收器(http://developer.android.com/reference /android/app/Activity.html#onDestroy())? – 2012-07-22 00:43:12

+0

工作!你能說這是一個答案,所以我可以標記它的答案?謝謝! – 2012-07-22 00:55:22

+0

我做到了,不客氣:-) – 2012-07-22 01:03:17

回答

2

關閉屏幕將始終呼叫onStop(),但不會與onDestroy()onDestroy()可能會在系統丟失內存的情況下調用...我認爲您可以在onDestroy()中取消註冊接收器...