编程方式发送短信的Android(不接收状态)(Programatically send SMS A

2019-08-01 03:16发布

我使用http://mobiforge.com/developing/story/sms-messaging-android一个字的代码示例字除外,我改变这样的事实:

import android.telephony.gsm.SmsManager;

至:

import android.telephony.SmsManager;

该短信发送精细然而,我没有得到它被交付的TOAST消息(发送到网络)。 我试图SMS融入我的应用程序,这是非常重要的。 我相信这是可以做到,因为怎么回事就股票的短信应用知道何时停止显示“发送圈”。 相关的代码段如下:

   //---when the SMS has been sent---
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS sent", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off", 
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, 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));          

我使用的是果冻豆ROM,但我相信我刚才测试了同一网段中的姜饼和ICS具有相同的结果。 有API改变或有与样品的问题吗? 我在Sasmsung GSIII测试是否有帮助。 我的老测试是在一个史诗。

Answer 1:

现在有这个问题,如果你正在测试这个在Android 4.4或更高版本的人来说,这是行不通的,除非你的应用程序是默认的短信应用。

从文档 -

与Android 4.4开始,系统设置允许用户选择“默认的短信应用。” 一旦被选择,只有默认的短信应用是能够写入到SMS提供和当用户接收SMS或当用户接收的MMS的WAP_PUSH_DELIVER_ACTION广播只默认的短信应用接收SMS_DELIVER_ACTION广播。 默认的短信应用负责,当它接收或发送一个新的消息细节写入到SMS提供。

见这里 。



Answer 2:

您的代码看起来不错的事情。 也许问题是,您的运营商不提供您的送达报告(有可能是一种选择订阅服务),或者你没有在您的手机开启发送报告。 有Play商店称为传递报告,从中可以看到每条短信的状态有帮助的应用程序。



文章来源: Programatically send SMS Android (Not receiving status)