2012-12-10 46 views
0

如何阻止我的應用程序多次顯示吐司消息?無論何時我發送短信,無論是一個,兩個還是更多聯繫人,它總是多次顯示Toast消息。有時候烤麪包會顯示爲閃爍,同時顯示「短信發送」信息約2,4,18次。我認爲它會使短信「發送短信」翻倍。如果我將其發送給1號,它顯示2,依此類推吐司消息看起來好像在閃爍 - android

try { 

        String message = "firealert"; 
        String additionalMessage = send_input.getText().toString(); 
        info.open(); 
        ArrayList<String> data = info.getContactNumber(); 
        info.close(); 
        for(String contactNum : data) 
        { 
         sendSMS("0".concat(contactNum), message+" "+additionalMessage); 
         //sendSMS(contactNum, message+" "+additionalMessage); 
        } 
        } catch (Exception e) { 
         Toast.makeText(getApplicationContext(), 
         "SMS failed, please try again later!", 
         Toast.LENGTH_LONG).show(); 
         e.printStackTrace(); 
        } 

,並使用此代碼顯示SMS狀態

private void sendSMS(String phoneNumber, 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--- 
     registerReceiver(new BroadcastReceiver() 
     { 
      public void onReceive(Context arg0, Intent arg1) 
      { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         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(); 
         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; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     //---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver() 
     { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) 
      { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(getBaseContext(), "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break;       
       } 
      } 
     }, new IntentFilter(DELIVERED));   

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
} 

回答

0

你可以做的就是創建一個吐司變量。

private Toast t; 

if(t!=null)  
    t.cancel(); 
Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show(); 

OR

if(t==null)  
    Toast.makeText(getBaseContext(), "SMS sent", 
            Toast.LENGTH_SHORT).show(); 
+0

它仍然顯示多次,我想知道爲什麼 –

+0

也許我會再嘗試一遍以後在Android手機。我現在正在使用模擬器。 –

+0

我認爲它會使短信「發送短信」翻倍。如果我把它發送到1號碼,它會顯示2,等等 –

0

是否短信的內容有超過160個字符?你會看到Toast(content.length()/ 160)次嗎? 短信可能會分成幾部分。

+0

不,不超過160個字符 –

+0

我認爲它使短信「發送短信」翻倍。如果我將它發送到1號碼,它會顯示2,依此類推 –