2017-05-02 44 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