2011-05-10 130 views
7

我正在使用以下代码将短信发送到Android手机。但是,如果我发送SMS到任何号码它不会被发送。可能是什么问题?在Android中发送短信

package SMSApp.com; 

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.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class SMS extends Activity { 
    /** Called when the activity is first created. */ 

    Button btnSendSMS; 
    EditText txtPhoneNo; 
    EditText txtMessage; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
     txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
     txtMessage = (EditText) findViewById(R.id.txtMessage); 

     btnSendSMS.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       String phoneNo = txtPhoneNo.getText().toString(); 
       String message = txtMessage.getText().toString(); 
       if (phoneNo.length()>0 && message.length()>0) 
        sendSMS(phoneNo, message); 
       else 
        Toast.makeText(getBaseContext(), 
         "Please enter both phone number and message.", 
         Toast.LENGTH_SHORT).show(); 
      } 

      /*private void sendSMS(String phoneNo, String message) { 
       // TODO Auto-generated method stub 

       PendingIntent pi = PendingIntent.getActivity(SMS.this, 0, new Intent(SMS.this, SMS.class), 0); 
        SmsManager sms = SmsManager.getDefault(); 
        sms.sendTextMessage(phoneNo, null, message, pi, null); 
      }*/ 

      private void sendSMS(String phoneNumber, String message) 
      { 
       String SENT = "SMS_SENT"; 
       String DELIVERED = "SMS_DELIVERED"; 

       PendingIntent sentPI = PendingIntent.getBroadcast(SMS.this, 0, 
        new Intent(SENT), 0); 

       PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.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 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

我在做类似的事情! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42 2013-01-22 07:54:28

回答

12

我真的不明白你为什么要嵌套sendSMS方法 - 代码适用于我。尝试检查,如果你得到了

<uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 

权限在文件中设置,并尝试这个代码,而不是:

package SMSApp.com; 
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.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class SMS extends Activity { 
    /** Called when the activity is first created. */ 

    Button btnSendSMS; 
    EditText txtPhoneNo; 
    EditText txtMessage; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
     txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
     txtMessage = (EditText) findViewById(R.id.txtMessage); 

     btnSendSMS.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       String phoneNo = txtPhoneNo.getText().toString(); 
       String message = txtMessage.getText().toString(); 
       if (phoneNo.length()>0 && message.length()>0) 
        sendSMS(phoneNo, message); 
       else 
        Toast.makeText(getBaseContext(), 
            "Please enter both phone number and message.", 
            Toast.LENGTH_SHORT).show(); 
      } 

     }); 
    } 

    private void sendSMS(String phoneNumber, String message) 
    { 
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(SMS.this, 0, 
      new Intent(SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.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(SMS.this, "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
         Toast.makeText(SMS.this, "Generic failure", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NO_SERVICE: 
         Toast.makeText(SMS.this, "No service", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NULL_PDU: 
         Toast.makeText(SMS.this, "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(SMS.this, "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(SMS.this, "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 

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

如何取消注册接收器? – 2015-01-07 09:58:12

0

如果一切正常(代码清单中的文件的权限),打开两个仿真器窗口(他们将会像5554:TestDevice15556:TestDevice1)。

现在,如果您正在将应用程序安装到5554,请将消息发送到5556并检入另一个模拟器。