以编程方式发送短信Android(未接收状态)

2024-02-13

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

import android.telephony.gsm.SmsManager;

to:

import android.telephony.SmsManager;

短信发送正常,但我没有收到已发送的 TOAST 消息(发送到网络)。我正在尝试将短信集成到我的应用程序中,这很重要。我确信这是可以做到的,因为否则股票短信应用程序如何知道何时停止显示“发送圈”。相关代码部分如下:

   //---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 是否已更改或者示例是否存在问题?我正在 Sasmsung GSIII 上进行测试,如果有帮助的话。我以前的测试是在 Epic 上进行的。


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

从文档中 -

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

See here https://developer.android.com/about/versions/android-4.4.html#SMS.

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

以编程方式发送短信Android(未接收状态) 的相关文章

随机推荐