尽管尝试了所有内容,SMSManager仍返回RESULT_ERROR_GENERIC_FAILURE

时间:2016-10-08 12:58:25

标签: android sms smsmanager

我正在尝试在我的应用中创建一个功能,可以在后台向多个联系人发送短信。我正在使用RESULT_ERROR_GENERIC_FAILURE来做同样的事情。但是,每次for (int index = 0; index < contactsList.size(); index++) { final String phonenumber = contactsList.get(index).getPhone().substring(1); if (index == 0) { sendSMS(phonenumber.trim(), sms, contactsList); } else { new Handler().postDelayed(new Runnable() { public void run() { sendSMS(phonenumber.trim(), sms, contactsList); } }, 1000 * 20); } } 返回时。我在堆栈溢出上阅读了很多类似的帖子并尝试了所有的解决方案,但它们似乎都不适合我。具体来说,我试过以下:

  1. 将电话号码格式更改为“+ 91xxxxxxxxxx”,“9xxxxxxxxx”,“91xxxxxxxxxx”
  2. 检查了SIM卡余额
  3. 短信服务中心号码也有效
  4. 短信完全在160个字符以内
  5. 延迟发送多条短信
  6. 以下是我发送短信的方式:

    sendSMS

    以下是private void sendSMS(String phoneNumber, final String message, final List<MyContactsActivity.ContactsRow> list) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent( SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent(DELIVERED), 0); // ---when the SMS has been sent--- context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: ContentValues values = new ContentValues(); for (int i = 0; i < list.size() - 1; i++) { values.put("address", list.get(i).getPhone()); values.put("body", message); } context.getContentResolver().insert( Uri.parse("content://sms/sent"), values); Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); Log.e("Panic", "1"); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); Log.e("Panic", "2"); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); Log.e("Panic", "3"); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); Log.e("Panic", "4"); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); Log.e("Panic", "5"); break; } } }, new IntentFilter(SENT)); // ---when the SMS has been delivered--- context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); Log.e("Panic", "6"); break; case Activity.RESULT_CANCELED: Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); Log.e("Panic", "7"); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } 方法:

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

    以下是我的相关清单权限:

    {{1}}

    注意:我正在运行Android 6的真实设备上测试我的应用。我已经检查了运行时权限以及它们已启用。

    有谁能告诉我我做错了什么?

4 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法。在双SIM卡电话的情况下,有一个选项指定从哪个SIM发送SMS。如果选项已设置为&#34;每次询问&#34;,则会发生一般性故障。解决方法是将此选项设置为任一SIM卡。但是,我还没有找到编程方式来做到这一点。

答案 1 :(得分:1)

这可能是因为有一条大消息。 Android支持长消息的分段短信,请尝试使用分段短信。

SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> parts = smsManager.divideMessage(message);
smsManager.sendMultipartTextMessage(phoneNo, null, parts, null, null);

答案 2 :(得分:0)

您的代码是正确的。检查您是否有活动的SIM卡并在其中保持平衡。因为通用故障是来自服务提供商的响应。

答案 3 :(得分:0)

我在上面的代码中遇到了同样的问题

我尝试重新启动手机一次,然后再试一次。

相关问题