我正在逐字逐句地使用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是否已更改或样本存在问题?如果有帮助,我正在测试Sasmsung GSIII。我的旧测试是在史诗上。
答案 0 :(得分:1)
对于现在遇到此问题的任何人,如果您在Android 4.4或更高版本上进行测试,除非您的应用是默认的短信应用,否则它将无效。
来自文档 -
从Android 4.4开始,系统设置允许用户选择“默认短信应用”。一旦选中,只有默认的SMS应用程序能够写入SMS提供程序,并且当用户收到SMS或当用户收到MMS时,只有默认SMS应用程序接收SMS_DELIVER_ACTION广播时才会收到SMS或WAP_PUSH_DELIVER_ACTION广播。默认的SMS应用程序负责在收到或发送新消息时向SMS提供商写入详细信息。
请参阅here。
答案 1 :(得分:0)
你的代码看起来很不错。也许问题是您的运营商没有向您提供发送报告(可能有订购服务的选项),或者您没有在您的手机中打开发送报告。在Play商店中有一个名为Delivery Reports的有用应用程序,您可以从中查看每个短信的状态。