2011-07-24 18 views
1

我試圖發送文本消息一定的時間,當我執行超過100次的任何操作時它會強制關閉應用程序。有什麼建議麼?發送超過100條短信時Android應用程序強制關閉

好的,這裏是我更新的代碼,現在有一些額外的問題 - 敬酒永遠不會消失,如果我啓用我的if語句進行數據驗證,它將無法正常工作(基本上試圖提示用戶輸入信息,如果它爲空,而不是隻強制關閉應用程序)

這裏是我更新的代碼:

package net.learn2develop.SMS; 

import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
EditText PhNumber, Message, TxtCount; 
Button btnSendSMS; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //create text box to enter phone number 
    PhNumber=(EditText) findViewById(R.id.PhNumber); 

    //create text box to enter message 
    Message=(EditText) findViewById(R.id.Message); 

    //create text box to see how many times the user wants to send message 
    TxtCount=(EditText) findViewById(R.id.TxtCount); 

    //create button to send text message 
    btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
    //create listener for button 
    btnSendSMS.setOnClickListener(new View.OnClickListener() 

    {    
     public void onClick(View v) 
      {   
       //variable for count. 
       int count = 1; 
       //variable for text message 
       String msg = Message.getText().toString(); 
       //variable for phone number 
       String num = PhNumber.getText().toString(); 
       //variable for the amount of text messages to send. 
       int max = Integer.parseInt(TxtCount.getText().toString()); 
       //variable to watch button and hide keyboard 
       InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

       //test to see if count has any value at all 
       //if (TxtCount.getText().toString().equals("")) 
       //{ 
       // Toast.makeText(getBaseContext(), "Please enter a number of times to nuke!", Toast.LENGTH_SHORT).show(); 
       // return; 
       //} 
       //test to see if number has a value 
       //else if (num.equals("")) 
       //{ 
       // Toast.makeText(getBaseContext(), "Please enter a phone number to nuke!", Toast.LENGTH_SHORT).show(); 
       // return; 
       //} 
       //test to see if there is a message 
       //else if (msg.equals("")) 
       //{ 
       // Toast.makeText(getBaseContext(), "Please enter a message!", Toast.LENGTH_SHORT).show(); 
       // return; 
       //}    

       //if all fields have valid data -- send text message until count = max      
       while (count <= max) {     
        sendSMS(num, msg); 
        count++; 
       }; 
       //hide the keyboard 
       mgr.hideSoftInputFromWindow(TxtCount.getWindowToken(), 0); 
       mgr.hideSoftInputFromWindow(PhNumber.getWindowToken(), 0); 
       mgr.hideSoftInputFromWindow(Message.getWindowToken(), 0); 
       //set phone number to "" 
       PhNumber.setText(""); 
       //set message to "" 
       Message.setText(""); 
       //set count to "" 
       TxtCount.setText(""); 
       //refocus on phone number 
       PhNumber.requestFocus();      
      }   
    });   
} 

//sends a sms message to another device 
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(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS Nuked!", 
          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 Nuked!", 
            Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(getBaseContext(), "SMS not sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 

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

您可能不應該使用Android設備進行大量發短信。 –

+0

爲什麼你短時間內發送100條短信? – bdonlan

+0

您能否將日誌發佈到LogCat中? – NguyenDat

回答

0

也許嘗試分裂的消息,或送他們一個計時器,而不是一個循環,你可以嘗試一些像這樣:

   Thread background = new Thread (new Runnable() { 
       public void run() { 
        Thread.sleep(100); 
          // Send message 
       } 
      }); 
0

您可能應該安排服務在每條消息發送(或失敗)時發送廣播,然後才發送下一條消息。您可能正在淹沒服務,導致部隊關閉。

檢查the docs關於如何使用「發送的意圖」。

+0

是的,我添加了一個意圖,我會發布我的更新代碼。 – Android