1

我正在逐字使用http://mobiforge.com/developing/story/sms-messaging-android代码示例,除了我更改了:

import android.telephony.gsm.SmsManager;

至:

import android.telephony.SmsManager;

SMS 发送良好,但我没有收到它已发送的 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));          

我正在使用 Jelly Bean ROM,但我相信我不久前在 Gingerbread 和 ICS 上测试了相同的部分,结果相同。API 是否已更改或示例是否存在问题?如果有帮助,我正在测试三星 GSIII。我的旧测试是在 Epic 上进行的。

4

2 回答 2

1

对于现在遇到此问题的任何人,如果您在 Android 4.4 或更高版本上进行测试,除非您的应用程序是默认的 SMS 应用程序,否则它将无法工作。

从文档 -

从 Android 4.4 开始,系统设置允许用户选择“默认短信应用”。选择后,只有默认的 SMS 应用程序能够写入 SMS Provider,并且只有默认的 SMS 应用程序在用户收到 SMS 时接收 SMS_DELIVER_ACTION 广播,或者当用户收到 MMS 时只有默认 SMS 应用程序接收 WAP_PUSH_DELIVER_ACTION 广播。默认 SMS 应用程序负责在 SMS Provider 接收或发送新消息时向其写入详细信息。

这里

于 2015-03-28T08:58:09.843 回答
0

你的代码看起来很不错。问题可能是您的运营商没有为您提供交付报告(可能有订阅服务的选项),或者您没有在手机中打开交付报告。Play 商店中有一个名为 Delivery Reports 的有用应用程序,您可以从中查看每条短信的状态。

于 2014-10-13T19:58:02.600 回答