2012-07-22 64 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()中取消注册接收器...