2013-02-25 146 views
3

我正在写一个应用程序,我正在试图发送短信给接收者,但每当我点击发送,得到消息: - 短信展示,请稍后再试!发送短信给接收者

请参考下面的屏幕截图,就像你看到的,这里我试图将消息发送到拉胡尔 ...

的Manifest.xml:

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

请检查以下代码:

 private TextView name; 
private ListView list; 
private Database db; 
private Contact contact; 
Button buttonSend; 
EditText textSMS; 

private Map<String, AuthenticatorDescription> map = new LinkedHashMap<String, AuthenticatorDescription>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.editor); 

    // bind GUI components 
    this.name = (TextView) findViewById(R.id.editor_name); 
    this.list = (ListView) findViewById(R.id.editor_list); 

    // check if contact id is valid 
    this.db = new Database(getContentResolver()); 
    int contactId = getIntent().getIntExtra(CONTACT_ID, NO_CONTACT_ID); 
    this.contact = this.db.getContact(contactId); 
    if (this.contact == null) { 
     finish(); 
    } 
    this.name.setText(this.contact.getName()); 

    // pre-load information about all account types 
    AuthenticatorDescription[] authTypes = AccountManager.get(this).getAuthenticatorTypes(); 
    for (AuthenticatorDescription authDesc : authTypes) { 
     this.map.put(authDesc.type, authDesc); 
    } 

    // bind list events 
    this.list.setOnItemClickListener(this); 
    this.list.setOnCreateContextMenuListener(this); 

    // create the GUI 
    updateView(); 



    saveGreeting = (ImageButton) findViewById(R.id.greeting); 
    saveGreeting.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      customGreeting(v); 
     } 
    }); 
    buttonSend = (Button) findViewById(R.id.buttonSend); 
    textSMS = (EditText) findViewById(R.id.editTextSMS); 
    buttonSend.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      String recepient = name.getText().toString(); 
      String sms = textSMS.getText().toString(); 

      try { 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(recepient, null, sms, null, null); 
      Toast.makeText(getApplicationContext(), "SMS Sent!", 
         Toast.LENGTH_LONG).show(); 
      } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), 
       "SMS faild, please try again later!", 
       Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
      } 

     } 
    }); 
} 
+2

所以什么是你的堆栈跟踪? – John3136 2013-02-25 05:12:10

+0

@ John3136我无法发送消息给Rahul,并得到消息:SMS faild,请稍后再试! ... – ASMUIRTI 2013-02-25 05:14:32

+0

这是你写的错误信息。不是堆栈跟踪。 – John3136 2013-02-25 05:16:10

回答

0
3

的Android API的样品有一个很好的例子,为什么你不给它一个尝试

它位于:

...\sdk\samples\android-17\ApiDemos\src\com\example\android\apis\os\SmsMessagingDemo.java 

粘贴从样本:

 SmsManager sms = SmsManager.getDefault(); 

     List<String> messages = sms.divideMessage(contentTextEdit.getText().toString()); 

     String recipient = recipientTextEdit.getText().toString(); 
     for (String message : messages) { 
      sms.sendTextMessage(recipient, null, message, PendingIntent.getBroadcast(
          SmsMessagingDemo.this, 0, new Intent(ACTION_SMS_SENT), 0), null); 
     } 

短信注册广播接收机发送和传递意图

registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String message = null; 
       boolean error = true; 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        message = "Message sent!"; 
        error = false; 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        message = "Error."; 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        message = "Error: No service."; 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        message = "Error: Null PDU."; 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        message = "Error: Radio off."; 
        break; 
       } 
.... 
1

注册广播接收器用于发送和交付喜欢跟着

无效sendSMS (String phoneNumber,String message) {
0 PendingIntent pi = PendingIntent.getActivity(this,0, new Intent(this,test.class),0);
SmsManager sms = SmsManager.getDefault(); 短信。sendTextMessage(phoneNumber,null,message,pi,null);
*/

 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--- 
     first = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       boolean status = false; 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         status = true; 
         /* 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; 
       } 
       if(!status) 
       { 
        Toast.makeText(getBaseContext(), "SMS Send Failed", 
          Toast.LENGTH_SHORT).show(); 
        unregisterReceiver(this); 
       } 
      } 
     }; 
     registerReceiver(first,new IntentFilter(SENT)); 

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


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

注册的BroadcastReceiver不要忘记的onStop注销的BroadcastReceiver()方法之后。

if(first!=null) 

unregisterReceiver(first); if(second!=null) unregisterReceiver(second);