2012-09-25 90 views
0

我正在开发一个Android短信应用程序。以下代码用于发送短信。当我点击返回按钮时,广播接收器停止

public void sendSms(final String phoneNumber, final String message){ 


    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
     new Intent(SENT), 0); 
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(DELIVERED),0); 

    //--- When the SMS has been sent -- 

    sendBroadcastReceiver=new BroadcastReceiver() { 


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

       case Activity.RESULT_OK: 

        Toast.makeText(getBaseContext(), "SMS sent", 
         Toast.LENGTH_SHORT).show(); 

        ContentValues values = new ContentValues(); 
        values.put("address", phoneNumber); 
        values.put("body", message); 
        getContentResolver().insert(Uri.parse("content://sms/sent"), values); 


        break; 

       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
         Toast.LENGTH_SHORT).show(); 

        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
         Toast.LENGTH_SHORT).show(); 

        ContentValues values1 = new ContentValues(); 


        values1.put("address", phoneNumber); 
        values1.put("body", message); 
        getContentResolver().insert(Uri.parse("content://sms/queued"), values1); 

        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 

        Toast.makeText(getBaseContext(), "Null PDU", 
         Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 

        Toast.makeText(getBaseContext(), "Radio off", 
         Toast.LENGTH_SHORT).show(); 
        break; 

       default: 
        break; 
      } 

      context.unregisterReceiver(this); 
     } 
    }; 

    SmsManager sms = SmsManager.getDefault(); 

     registerReceiver(sendBroadcastReceiver , new IntentFilter(SENT)); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

} 

它正在工作正常,当我保持屏幕,直到发送短信。它会写短信内容/短信/发送或排队取决于发送report.But如果我按回发按钮,而发送短信。它将发送短信,但不写入内容/短信/发送或排队也赢了,t注销也播放。

请帮我解决我的问题。

+0

让广播由服务处理 – vikki

+0

我一定误解了这个问题,试着让你的广播接收机变成静态的,或者把它移动到它自己的类文件中。 – vikki

+0

@vikki ...谢谢你...你对这个问题有什么想法吗... http://stackoverflow.com/questions/11227411/how-to-get-the-address-of-a-draft -sms – sarath

回答

0

我已经通过使用服务解决了我的问题。使用startservice()和stopservice()我可以管理注册。感谢您的建议朋友。 @Vikki ...你的回答给了我钥匙。

2

当按下后退时,您基本上正在退出您的应用程序。因此,为了控制按下后退时的行为,请覆盖onBackPressed()。在这里你可以确保内容被写入,此外你需要在这里取消注册广播。

+0

...你可以请添加一些更多的细节..一个示例代码将有所帮助。有时在发送短信后退按钮按下,有些时候没有发送短信,有时发送时。 – sarath

相关问题