android-发送消息的广播接收器

android-发送消息的广播接收器,第1张

概述我正在开发一个发送短信的应用程序,并且能够得到响应以了解短信是否已发送(或未发送).但是由于我想确定发送了哪些短信(由接收者和短信发送),因此我使用附加功能将这些信息添加到了意图中.效果很好,但仅适用于我发送的第一条消息.在收到第一条消息后,我收到了相同的附加消息,看来

我正在开发一个发送短信的应用程序,并且能够得到响应以了解短信是否已发送(或未发送).
但是由于我想确定发送了哪些短信(由接收者和短信发送),因此我使用附加功能将这些信息添加到了意图中.

效果很好,但仅适用于我发送的第一条消息.在收到第一条消息后,我收到了相同的附加消息,看来我总是发送相同的短信.
实际上,每个短信都是正确发送的,因此问题仅涉及“已发送的通知”.
奇怪的是,当我收到另一条短信时,它又可以正常工作(我得到了正确的附加信息),但只能发送一条短信.看来,一个新的短信事件会“重置”已发送消息的广播接收者.

这是我的代码:

class SmsSender{private final String SENT = "SMS_SENT";private static SmsSender instance=null;private broadcastReceiver br;SmsSender(){}    //SINGLetoNpublic static SmsSender getSmsSender(Context ctx, AddressBook ab, DBManager dbm){    if(instance==null && ctx!=null){    instance=new SmsSender();    instance.ctx=ctx;    instance.ab=ab;    instance.dbm=dbm;    instance.setBR();    }    return instance;}private voID setBR(){    br=new broadcastReceiver(){         public voID onReceive(Context arg0, Intent arg1)             {                  br=null;                switch (getResultCode())                                {                              case Activity.RESulT_OK:                      if(arg1.hasExtra("text") && arg1.hasExtra("receiver")){                            Log.i("SMS","SMS sent to "+arg1.getStringExtra("receiver")+": "+arg1.getStringExtra("text"));                    }                break;                    .....                 }            }        };        ctx.registerReceiver(br, new IntentFilter(SENT));}public voID send(String phoneNumber, String text) {    String nums[]=phoneNumber.split(",");    for(int i=0; i<nums.length; ++i){    if(nums[i]!="" && text!=""){                SmsManager sms = SmsManager.getDefault();                ArrayList<String> parts = sms.divIDeMessage(text);                messageCount = parts.size();                ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount);                Intent myIntent=new Intent(SENT);                **myIntent.putExtra("receiver", nums[i]);                myIntent.putExtra("text", text);**                for (int j = 0; j < messageCount; j++){                    sentIntents.add(PendingIntent.getbroadcast(ctx, 0, myIntent,0));                }                    sms.sendMultipartTextMessage( nums[i].trim(), null, parts, sentIntents, null);            }else{            Notifica.notify(ab.getContactname(nums[i])+": Error sending SMS",ctx);            }} }}

怎么了?

解决方法:

最后,我解决了这个问题,只是替换了以下行:

sentIntents.add(PendingIntent.getbroadcast(ctx, 0, myIntent,0));

与此:

sentIntents.add(PendingIntent.getbroadcast(ctx, 0, myIntent,PendingIntent.FLAG_UPDATE_CURRENT));

从文档中:

FLAG_UPDATE_CURRENT
…如果所描述的PendingIntent已经存在,则保留它,但将其多余的数据替换为新Intent中的数据.如果您要在仅更改附加项的情况下创建意图,则可以使用此方法,并且不必担心接收到先前PendingIntent的任何实体都可以使用您的新附加项启动它,即使未明确为其提供新的附加项.

总结

以上是内存溢出为你收集整理的android-发送消息的广播接收器全部内容,希望文章能够帮你解决android-发送消息的广播接收器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1210827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存