Android ,在服务当前不可用时接收带有 Telephony.SMS_RECEIVED 操作的广播

Android , Receiving broadcast with Telephony.SMS_RECEIVED action when service is currently unavailable

现在我正在升级我的应用程序,它有助于发送 SMS 以增加收件人数量。

我的目标是在特殊情况下检查发送进度,例如当提供商服务不可用时:

RESULT_ERROR_NO_SERVICE (失败,因为当前服务不可用)

大约一年前,我进行了相同的测试,并且一切都按需进行, 当我关闭我的 phone 提供商服务或发送到异常号码时 触发了下一个案例:

RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_NO_SERVICE
RESULT_ERROR_NULL_PDU
RESULT_ERROR_RADIO_OFF

据我所知,这种情况是在我的广播接收器中收到的,我要求在我的广播接收器意图过滤器中收听 android.provider.Telephony.SMS_RECEIVED 操作,并且此调用来自系统设备。

我了解了 intent 过滤器的优先级,还使用 ​​queryBroadcastReceivers 检查了哪些广播接收器在我的系统上运行,删除了所有试图收听相同操作的应用程序并将我的过滤器优先级设置为最大 "use a value that is larger than SYSTEM_LOW_PRIORITY and smaller than SYSTEM_HIGH_PRIORITY" (2147483647).

不幸的是,当我发送 SMS 时,我的提供商已关闭,我的广播接收器什么也没收到,而当我将其转回去时,一切正常。

什么可能导致问题?

谢谢!

广播将有不同的详细信息,您可以像下面的示例一样访问这些详细信息。在我的示例中,如果出现错误,我只是在烘烤错误,但你可以做你想做的事

BroadcastReceiver receiver2 = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        switch (getResultCode())
        {
            case Activity.RESULT_OK:
                Toast.makeText(arg0, "SMS sent",
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                Toast.makeText(arg0, "Generic failure",
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                Toast.makeText(arg0, "No service",
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                Toast.makeText(arg0, "Null PDU",
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                Toast.makeText(arg0, "Radio off",
                        Toast.LENGTH_SHORT).show();
                break;
        }
    }
};

希望对您有所帮助:)