2017-05-02 9 views
0

一般に利用可能なコードを使用して160文字未満のSMSを送信しようとしています。しかし、一部の携帯電話では、私は一般的な失敗に苦しんでいます。私はすべてのSMSに読み取り/書き込み権限も与えました。私は電話番号の国コードの有無にかかわらず両方の方法を試しましたが、同じエラーが発生しています。なぜこのエラーが発生していますか?以下はコードです。一部の携帯電話でSMSを送信するときに一般的なエラーが発生する

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

関連する問題