2012-03-16 89 views
3

我是一名新的Android開發人員。 我寫下面的代碼發送短信。無法發送短信

private void sendSMS(String phoneNumber) 
    {   
    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 
    final AlertDialog dialog = new AlertDialog.Builder(this).create(); 

    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: 
       dialog.setMessage("SMS is Successfully Sent for Contact Request "); 
       dialog.setTitle("ALERT:SMS Sent"); 

       dialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", 
       new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        return; 

       } 
       }); 
       dialog.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; 
      } 
     return; 
    } 
    }, new IntentFilter(SENT)); 


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, messageToSend, sentPI, deliveredPI);  
} 

該代碼在Emulator中成功運行,但在手機中無法運行。 它會顯示以下錯誤

  case SmsManager.RESULT_ERROR_NO_SERVICE: 
      Toast.makeText(getBaseContext(), "No service",); 

我已經給出了所需的權限,並在手機SIM卡有(有足夠的餘額)爲好。

我只是stucked請幫助。

+0

,一從'gsm'軟件包已棄用?你能告訴我們你正在使用的權限嗎?你的手機有覆蓋嗎? – tidbeck 2012-03-16 07:25:57

+0

是的我正在使用smsmanager的電話包。 – kamal 2012-03-25 08:58:18

+0

嘗試在另一個android手機上運行此應用程序。代碼對我來說看起來非常好。 – 2012-03-16 05:07:18

回答

1

使用這段代碼來發送消息

private void sendSMS(String phoneNumber, String message) 
{   
    Log.d("phoneNumber",phoneNumber); 
    Log.d("MEssage",message); 
    PendingIntent pi = PendingIntent.getActivity(CONTEXT, 0, 
     new Intent(CONTEXT,Object.class), 0);     
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(phoneNumber, null, message, pi, null);   
} 
+0

不工作。再次獲取服務。 – berserk 2015-01-14 19:34:40

0

嘗試這個代碼 -

//---sends an 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 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);   
} 

而且,還您是否使用了正確的`SmsManager`參考this tutorial