在子线程中发送短信,静态注册SentMsgReceiver。
1. 应该在子线程中执行发送短信的操作。
如果没有在子线程中发送短信会出现错误:点击发送短信之后,立即跳转到其他界面,那么这次发送短信可能就会失败!
请注意往子线程方法中传入外部的实参必须由final修饰。
private void performSendMessage(final String content) {
if(content.length()==0) {
Toast.makeText(mContext, "can't send a blank msg.", Toast.LENGTH_SHORT).show();
} else {
mEditMsg.setText("");
final String[] numbers = mNumber.split(",");
final Uri uri = Telephony.Sms.Outbox.addMessage(getContentResolver(), "13146491338", content,
null, System.currentTimeMillis(), false, mThreadId);
onOutboxAddMessage(uri);
mHandler.post(new Runnable() {
@Override
public void run() {
sendMessage(numbers[0], content, uri);
}
});
}
}
2. 应该将SentMsgReceiver静态注册,而不是在短信列表界面中动态注册。
如果在短信列表中动态注册,点击发送短信之后,立即跳转到其他界面,那么会执行onDestroy()方法,调用unRegisterReceiver()注销SentMsgReceiver。
在com.txrj.sms.receiver包中新建SentMsgReceiver类(在SentMsgReceiver.java文件实现)
public class SentMsgReceiver extends BroadcastReceiver {
Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
Uri uri = intent.getParcelableExtra(TxrjConstant.EXTRA_SENT_URI);
int resultCode = getResultCode();
if(resultCode == Activity.RESULT_OK) {
Toast.makeText(context, "send message success.", Toast.LENGTH_SHORT).show();
updateMsgType(uri, Sms.MESSAGE_TYPE_SENT);
} else if(resultCode == SmsManager.RESULT_ERROR_GENERIC_FAILURE) {
Toast.makeText(context, "Generic failure.", Toast.LENGTH_SHORT).show();
updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
} else if(resultCode == SmsManager.RESULT_ERROR_NO_SERVICE) {
Toast.makeText(context, "service is currently unavailable.", Toast.LENGTH_SHORT).show();
updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
} else if(resultCode == SmsManager.RESULT_ERROR_NULL_PDU) {
Toast.makeText(context, "no pdu provided.", Toast.LENGTH_SHORT).show();
updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
} else if(resultCode == SmsManager.RESULT_ERROR_RADIO_OFF) {
Toast.makeText(context, "radio was explicitly turned off.", Toast.LENGTH_SHORT).show();
updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
}
}
private void updateMsgType(Uri uri, int type) {
ContentValues values = new ContentValues();
values.put(Sms.TYPE, type);
mContext.getContentResolver().update(uri, values, null, null);
}
}
最新文章
- 第14章 Linux启动管理(3)_系统修复模式
- bzoj 2739 最远点
- Leetcode Simplify Path
- Android实现滑动刻度尺效果,选择身高体重和生日
- C#窗体自定义控件
- Trace-导出已有的服务器端跟踪
- hadoop1.2.1 伪分布式配置
- const和#define的区别
- sentos 上安装vnc图形界面
- Java循环语句 for
- Struts2:ValueStack
- struts 2 三目运算
- contextmenu
- POJ 2155 Matrix (D区段树)
- 多线程编程-- part 2 线程的生命周期和优先级
- meta标签属性总结
- Android 实现高仿iOS桌面效果之可拖动的GridView(上)
- Unity 3D游戏开发学习路线(方法篇)
- Python爬虫【实战篇】百度翻译
- SharePoint REST API - 同步SharePoint列表项
热门文章
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
- 滴滴大数据算法大赛Di-Tech2016参赛总结
- Introduction to Learning to Trade with Reinforcement Learning
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
- 前端笔记----jquery入门知识点总结 (转)
- 夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
- c++ 11 游记 之 decltype constexpr
- OS 获取用户相册。保存图片。编辑图片为圆形
- SHELL字符串使用总结
- javascript将算法复杂度从O(n^2)做到O(n)