gpt4 book ai didi

android - 尽管尝试了一切,SMSManager 仍返回 RESULT_ERROR_GENERIC_FAILURE

转载 作者:行者123 更新时间:2023-11-29 01:15:35 38 4
gpt4 key购买 nike

我正在尝试在我的应用程序中创建一项功能,该功能可以在后台向多个联系人发送短信。我正在使用 SMS Manager API 来做同样的事情。但是,每次 RESULT_ERROR_GENERIC_FAILURE 都会返回。我阅读了很多关于堆栈溢出的类似帖子并尝试了所有解决方案,但它们似乎都不适合我。具体来说,我尝试了以下操作:

  1. 将电话号码格式更改为“+91xxxxxxxxxx”、“9xxxxxxxxx”、“91xxxxxxxxxx”
  2. 查看 SIM 卡余额
  3. 短信服务中心号码也有效
  4. SMS 消息在 160 个字符以内
  5. 延迟发送多条短信

这是我发送短信的方式:

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

这是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);
}

这是我的相关 list 权限:

<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" />

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

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

最佳答案

我已经找到了解决这个问题的方法。对于双卡手机,有一个选项指定从哪个 SIM 卡发送短信。如果选项已设置为“每次询问”,则会发生一般性故障。解决方案是将此选项设置为任一 SIM 卡。但是,我还没有找到编程方式来做到这一点。

关于android - 尽管尝试了一切,SMSManager 仍返回 RESULT_ERROR_GENERIC_FAILURE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39932647/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com