2017-05-02 42 views
0

我正在尝试使用一般可用的代码发送少于160个字符的短信。但对于一些手机,我得到了一般性失败。我也给了所有的短信读/写权限。我尝试了两种方式 - 使用和不使用电话号码的国家代码,但仍然得到相同的错误。为什么我得到这个错误?以下是代码。在某些手机中发送短信时发生通用故障

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) { 

      if(getResultCode()== Activity.RESULT_OK){ 
       Toast.makeText(getBaseContext(), "SMS sent", 
         Toast.LENGTH_SHORT).show(); 
      } else if (getResultCode()== SmsManager.RESULT_ERROR_GENERIC_FAILURE){ 
       Toast.makeText(getBaseContext(), "Generic failure", 
         Toast.LENGTH_SHORT).show(); 
      } else if (getResultCode() == SmsManager.RESULT_ERROR_NO_SERVICE){ 
       Toast.makeText(getBaseContext(), "No service", 
         Toast.LENGTH_SHORT).show(); 
      }else if (getResultCode() == SmsManager.RESULT_ERROR_NULL_PDU){ 
       Toast.makeText(getBaseContext(), "Null PDU", 
         Toast.LENGTH_SHORT).show(); 
      }else if (getResultCode() == SmsManager.RESULT_ERROR_RADIO_OFF){ 
       Toast.makeText(getBaseContext(), "Radio off", 
         Toast.LENGTH_SHORT).show(); 
      }else { 
       Toast.makeText(getBaseContext(), "Unknown error!!", 
         Toast.LENGTH_SHORT).show(); 
      } 


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

    //ArrayList<String> texts = sms.divideMessage(message); 
    //sms.sendMultipartTextMessage(phoneNumber, null, texts, null, null); 

} 

下面是我给出的权限。

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

可能无线电日志可能会给你一些线索。看看SmsDispatcher和RIL是否打印任何有趣的内容。 – fejd

回答

0

这些手机的API是否高于或等于6.0。如果是这样,你需要明确/以编程方式请求权限。

+0

@ ScottS-我已经从应用程序管理器提供了所有权限。每次启动应用程序时是否还需要获得许可? – hardcoder