0

当我的应用成功发送短信时,我正在尝试接收通知。我BroadcastReceiver用于通知。我在 中注册并在 中onResume()注销onPause()。但即使发送了短信,它也不会通知。我在循环中设置了断点BroadcastReceiver并且没有任何通知。可能是什么问题呢?我的代码如下。

@Override
public void onResume() {
    super.onResume();

    //---create the BroadcastReceiver when the SMS is sent---
    smsSentReceiver = 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;
            }
        }
    };

    //---create the BroadcastReceiver when the SMS is delivered---
    smsDeliveredReceiver = 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;
            }
        }
    }; 

    //---register the two BroadcastReceivers---
    registerReceiver(smsSentReceiver, new IntentFilter(SENT));
    registerReceiver(smsDeliveredReceiver, new IntentFilter(DELIVERED));      
}

@Override
public void onPause() {
    super.onPause();
    //---unregister the two BroadcastReceivers---
    unregisterReceiver(smsSentReceiver);
    unregisterReceiver(smsDeliveredReceiver);        
}
4

1 回答 1

1

我不确定您的用例。该文档建议您在 onPause 中取消注册接收器,但如果在您的应用程序处于后台时发送它,您将错过意图。如果您想在后台接收意图,您有两种选择:

  1. 运行服务并在那里注册接收器。
  2. 如果可能,您可以在清单中注册广播接收器。

文件说_

注意:如果在 Activity.onResume() 实现中注册接收器,则应在 Activity.onPause() 中取消注册。(暂停时您不会收到意图,这将减少不必要的系统开销)。

还要确保您在 ACTION 字符串(“android.provider.Telephony.SMS_RECEIVED”)中没有任何拼写错误,并且拥有正确的权限(“android.permission.RECEIVE_SMS”)。

编辑请看(尤其是 CommonsWare 的回答)

Android 发送短信的意图是什么?

用于发送 SMS 消息的 Android 广播接收器?

“当 Android 发送 SMS 时没有广播意图。这可能是出于隐私原因。”...CommonsWare

于 2013-03-30T14:47:13.070 回答