我使用以下代码将SMS发送到
Android手机.但是,如果我将
SMS发送到任何号码,它就不会被发送.可能是什么问题?
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,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,new Intent(SENT),0); PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.this,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,"SMS delivered",Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(),"SMS not delivered",new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber,sentPI,deliveredPI); } }); } }
解决方法
我真的不明白你为什么要嵌套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,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); PendingIntent deliveredPI = PendingIntent.getBroadcast(SMS.this,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,Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(SMS.this,Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(SMS.this,Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(SMS.this,Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RAdio_OFF: Toast.makeText(getBaseContext(),Toast.LENGTH_SHORT).show(); break; } } },new IntentFilter(SENT)); //--- When the SMS has been delivered. --- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0,Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(SMS.this,new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber,deliveredPI); } }