我正在开发一个发送短信的应用程序,我可以得到一个回复,知道短信是否被发送(或不发送)。
但由于我想确定发送了哪些短信(通过接收者和文本),我使用intent
将这些信息添加到extras
。
工作正常,但仅适用于我发送的第一封邮件。在第一条消息之后,我收到相同的附加内容,似乎我总是发送相同的短信。 实际上每个短信都是正确发送的,所以问题只涉及“发送通知”。 奇怪的是,当我对另一个短信进行反复思考时,它再次正常工作(我得到了正确的额外内容),但仅限于一个短信。似乎新的短信事件“重置”已发送消息的广播接收器。
这是我的代码:
class SmsSender{
private final String SENT = "SMS_SENT";
private static SmsSender instance=null;
private BroadcastReceiver br;
SmsSender(){}
//SINGLETON
public 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);
}}
}}
有什么问题?
答案 0 :(得分:4)
最后我解决了问题,只需更换这一行:
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的任何实体将能够使用您的新附加功能启动它,即使它们未明确赋予它,也可以使用此功能。