首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BroadcastReceiver通知

BroadcastReceiver通知
EN

Stack Overflow用户
提问于 2013-03-30 11:07:27
回答 1查看 1.1K关注 0票数 0

当我的应用程序成功发送sms时,我正在尝试接收通知。我使用BroadcastReceiver作为通知。我在onResume()注册,在onPause()中取消注册.但它不通知,即使短信是发送出去。我在BroadcastReceiver循环中设置了断点,没有任何通知。有什么问题吗?我的代码如下。

代码语言:javascript
复制
@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);        
}
EN

回答 1

Stack Overflow用户

发布于 2013-03-30 14:47:13

我不确定你的用例。这些文档表明,您在onPause中注销了接收方,但是当应用程序处于后台时,如果它被发送,您就会忽略它的意图。如果您想在背景中接收意图,您有两个选项:

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

文档

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

还要确保操作字符串("android.provider.Telephony.SMS_RECEIVED")没有任何错误,并且具有正确的权限("android.permission.RECEIVE_SMS")。

编辑请参阅(特别是CommonsWare的答案)

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

用于发送短信的Android广播接收器?

...CommonsWare说:“当安卓发送短信时,并没有播放的意图。这很可能是出于隐私原因。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15717823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档