发送短信导致一般失败

2024-01-11

我使用一种非常常见的方式通过我的应用程序发送短信,几乎所有教程中都对此进行了解释。我将 sendMultipartTextMessage 与“发送意图”和“传递意图”一起使用,然后广播接收器侦听结果并打印内容。

但是,每次我尝试发送短信时,即使是 10 个字符之类的内容,我总是会收到“一般失败”消息。

我的默认短信应用程序工作正常,我可以毫无问题地发送/接收短信/彩信,因此这不可能是网络问题。我不希望我的应用程序成为我新的默认短信应用程序,我只是希望它有时能够发送短短信。 我尝试了很多事情但一切都失败了。

这个问题是什么?我可以采取什么措施来解决它?

Utils :

public static void sendSMS(Context context, String destination) {

    final String srcPhoneNumber = PreferenceManager.getDefaultSharedPreferences(context).getString(OptionsFragment.SMS_SRC_PHONE_NUMBER, null);
    final String message = PreferenceManager.getDefaultSharedPreferences(context).getString(OptionsFragment.SMS_MESSAGE, null);

    if (message == null || message.isEmpty() || destination == null || destination.isEmpty()) {
        Console.log('e', "tag", "sms sending failure");
        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("sms");
        broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
        broadcastIntent.putExtra("sms", context.getString(R.string.empty_message));
        MyApplication.getInstance().sendBroadcast(broadcastIntent);
        return ;
    }

    final List<String> phoneNumbers = getPhoneNumbers();
    removeEmptyElement(phoneNumbers);

    SmsManager smsManager = SmsManager.getDefault();
    ArrayList<String> parts = smsManager.divideMessage(message);

    ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
    ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();

    PendingIntent sentPI = PendingIntent.getBroadcast(MyApplication.getInstance(), 0, new Intent("sms"), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(MyApplication.getInstance(), 0, new Intent("sms"), 0);

    for (String part : parts) {
        sentIntents.add(sentPI);
        deliveryIntents.add(deliveredPI);
    }


    SmsManager.getDefault().sendMultipartTextMessage(destination, srcPhoneNumber, parts, sentIntents, deliveryIntents);
}

接收者 :

@Override
    public void onReceive(Context context, Intent intent) {

        String s = intent.getAction();
        if (s.equals("sms")) {

            String message = intent.getStringExtra("sms");
            if (message != null) {
                if (message.equals("OK")) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(HomeFragment.this.getActivity());

                    builder.setMessage(context.getString(R.string.sms_send_success))
                            .setCancelable(true)
                            .setTitle("Success");

                    builder.create().show();
                } else {
                    Utils.makeErrorDialog(HomeFragment.this.getActivity(), message);
                }
            }
            else {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:

                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Utils.makeErrorDialog(HomeFragment.this.getActivity(),context.getString(R.string.send_error) + "Generic failure");
                        progressDialog.dismiss();
                        return;

                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        Utils.makeErrorDialog(HomeFragment.this.getActivity(),context.getString(R.string.send_error) + "No service");
                        progressDialog.dismiss();
                        return;

                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        Utils.makeErrorDialog(HomeFragment.this.getActivity(),context.getString(R.string.send_error) + "Null PDU");
                        progressDialog.dismiss();
                        return;

                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Utils.makeErrorDialog(HomeFragment.this.getActivity(),context.getString(R.string.send_error) + "Radio off");
                        progressDialog.dismiss();
                        return;

                }

...

中的第二个参数SmsManager#sendMultipartTextMessage()方法(以及sendTextMessage() and sendDataMessage()方法)是您的服务中心的号码,而不是发件人的号码。服务中心是网络的一部分,负责处理 SMS 消息的存储、路由和传送,因此传递无效号码将导致一般失败您获得的状态。你只需要通过null为了这。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送短信导致一般失败 的相关文章

随机推荐

  • PHP mail() 仅发送给单个收件人

    我正在为客户端更新一些非 PHP 相关页面 这些页面将表单输入发送到 PHP 但是 如果不对代码进行任何更改 客户端就会报告没有收到电子邮件 相反 他说它只向其中一封电子邮件发送电子邮件 而不是向所有 3 封电子邮件发送电子邮件 有人能指出
  • 如何使用 Mongoid 查看原始 mongoDB 查询

    我按照此页面查看了 mongoDB 查询 结果我可以看到轻便摩托车日志 但我看不到原始的 mongoDB 查询 如何在 Rails 控制台 服务器中显示 MongoDB 查询 https stackoverflow com question
  • 在 /proc/net 中创建 ProcFS 条目

    我尝试在里面创建一个条目 proc net来自内核模块 如下所示 struct file filp filp open proc net O RDONLY 0 struct proc dir entry parent PDE filp gt
  • Rails 在 grouped_collection_select 中选择一个字段

    I m using this code in my view to create a selection grouped collection select query city id states cities name id name
  • Adobe Acrobat Pro XI - 将 Javascript 添加到 PDF

    这似乎是一个非常新手的问题 但我一整天都在为这个问题绞尽脑汁 我正在运行 Adob e Acrobat Professional XI 的试用版 我希望将简单的 JavaScript 添加到 PDF 文件中 目的是创建一个 PDF 文件 打
  • 帮助比较 argv 字符串

    I have int main int argc char argv if argc 2 printf Mode of Use copy ex1 n return 1 formatDisk argv void formatDisk char
  • MVC 中的验证规则和业务规则

    我有一个 MVC Web 项目 根据最佳实践 添加验证规则和业务规则的正确位置在哪里 验证规则将是必填字段和必填格式 商业规则将是 该电子邮件已被存入数据库 这是我目前正在做的注册模型 public class RegisterModel
  • 基于 BGL 的新类中的自定义函数 addEdge 的返回值应该是多少?

    我尝试实现一个基于的图形类https stackoverflow com a 950173 7558038 https stackoverflow com a 950173 7558038 添加边缘时 我返回所添加边缘的边缘描述符 但如果边
  • Android:检查互联网是否有可用网络

    我使用此代码来检查网络连接 public boolean isOnline ConnectivityManager cm ConnectivityManager getSystemService Context CONNECTIVITY S
  • 使用 Pycurl 获取 HTML

    我一直在尝试使用 pycurl 检索 HTML 页面 因此我可以使用 str split 和一些 for 循环解析它以获取相关信息 我知道 Pycurl 检索 HTML 因为它将它打印到终端 但是 如果我尝试做类似的事情 html str
  • 简单配置时收到 Wix 安装程序错误代码 2343。 (WIX新手)

    使用以下简单的 WIX 配置时 我收到以下错误 正在安装的应用程序是 WPF 产品 Web Miner 安装程序 安装程序在安装此软件包时遇到意外错误 这可能表明此包有问题 错误代码为 2343 参数为
  • Spark应用程序状态中的FAILED和ERROR有什么区别

    我正在尝试创建已提交的 Spark 应用程序的状态图 当应用程序被视为失败时 我有点迷失了 各州来自这里 https github com apache spark blob d6dc12ef0146ae409834c78737c11605
  • 如何在sql中进行join时保持顺序

    表1和表2的主键 key1 key2 相同 表 3 是用户定义的表 具有与表 2 相同的一列字段 5 我需要从表 1 和表 2 中选择行 其中表 2 中的 field5 位于表 3 中 我需要以与 table3 相同的顺序获取行 table
  • 停留在显示 PHP 分页器上

    我正在尝试创建一个分页器 我创建了一个分页器类 其属性如下所示 但现在我正在尝试显示分页器 但我完全陷入了不同的循环 也许我应该去睡觉 P 之类的东西 重要的属性是 windows size the amount of pages visi
  • 如何使用 CSS 类选择第一个、第二个或第三个 html 元素内的子元素?

    我想在 CSS 中选择锚标记 出于以下 html 文档的目的 我也做了同样的事情 我的 html 文档在这里 div class first div
  • 用于扫描仪颜色意图的 WIA 自动化不起作用

    我无法让我的 Canon Pixma MP150 从 C 代码进行彩色扫描 以下代码会生成黑白图像 或者如果我将 6146 的值更改为 2 则会创建灰度图像 我希望能够通过代码进行彩色扫描 我知道扫描仪可以处理彩色图像 因为我可以通过 扫描
  • 当我在 PHP 中使用 cURL 发布文件时,是否应该设置 CURLOPT_UPLOAD?

    当我尝试设置它时 它会强制请求方法被 PUT 这是我在 CURLOPT POSTFIELDS 中放入的内容 curl setopt ch CURLOPT POSTFIELDS array fileUpload gt home apache
  • Visual Studio:如何将 obj 文件夹保存在其他位置

    有谁知道如何告诉 VS 2008 在构建解决方案时保存 obj 文件夹的位置 我们让它将 bin 文件夹保存到另一个路径 以保持源文件文件夹较小 即可通过电子邮件发送 但找不到任何方法告诉它对 obj 执行相同的操作 Use the Bas
  • 编辑选定列表视图项目的项目或子项目值

    好的 所以我在一个表单上有一个列表视图 当按下按钮时 它会打开一个新表单 其中包含所选列表视图项目的内容及其一系列文本框中的子项目 然后 用户可以更改文本框中的数据 然后按 保存 进行更改或按 取消 关闭窗口 我将使用什么命令将选定的列表视
  • 发送短信导致一般失败

    我使用一种非常常见的方式通过我的应用程序发送短信 几乎所有教程中都对此进行了解释 我将 sendMultipartTextMessage 与 发送意图 和 传递意图 一起使用 然后广播接收器侦听结果并打印内容 但是 每次我尝试发送短信时 即