在子线程中发送短信,静态注册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);
}
}
在子线程中发送短信,静态注册SentMsgReceiver。的更多相关文章
- 【转载】Delphi7从子线程中发送消息到主线程触发事件执行
在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上 ...
- iOS中发送短信/发送邮件的实现 韩俊强的博客
需要引入框架: MessageUI.framework 布局如下: 短信和邮件: #import "ViewController.h" #import <MessageUI/ ...
- Android 中发送短信
import android.net.Uri; //调用Android系统API发送短信 Uri uri = Uri.parse("smsto:" + strSmsPhone_va ...
- andorid中发送短信页面以及邮件发送
跳转到发送短信页面 Uri smsToUri = Uri.parse("smsto://10086"); Intent mIntent = new Intent( android. ...
- iOS 在当前控制器中发送短信
- (void)showMessageViewWithTel:(NSString *)tel { if( [MFMessageComposeViewController canSendText] ){ ...
- android 几种发送短信的方法
android中发送短信很简单, 首先要在Mainfest.xml中加入所需要的权限: ? 1 2 3 <uses-permission android:name="android.p ...
- iOS开发之线程间的MachPort通信与子线程中的Notification转发
如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...
- android 发送短信的两种方式,以及接收报告和发送报告
android发送短信,以及接收报告和发送报告 android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下: 一.调起系统发短信功能 ...
- YII 中加入短信接口的函数
public function smsto($telphone,$message) { //短信接口用户名 $uid,如果没有或不能发送请与客服联系 $uid = 'zyd'; //短信接口密码 $p ...
随机推荐
- c#利用SWIG调用c++dll学习总结【转】
开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: 3.0.12 swig的介绍 详细介绍可看官网,一下贴 ...
- 如何远程运行PowerShell命令?
首先, 被remote运行PowerShell的windows必须已经join了domain. 其次, 该Windows的PowerShell必须开启对remote command的接受, 运行下面的 ...
- 如何在Vblock里配置Boot from SAN
啥是vBlock ============ vBlock是VCE用在包含了它的数据中心产品的组件的机架上的一个商标名. 机架中的组件都是有VCE出厂前预先组装好的, 组件的预设以及解决方案, 都是客户 ...
- WebView&HTML5-----使用WebView播放HTML5视频文件
一.问题描述 HTML5提供了很多新的特性比如,视频播放.web本地存储.地理定位.应用缓存.Canvas等,但这些特性需要浏览器的支持,在Android应用中我们可以使用WebView构建Web应用 ...
- Android Studio快速集成讯飞SDK实现文字朗读功能
今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...
- 开源ckplayer 网页播放器去logo去广告去水印修改
功能设置介绍 本教程涉及到以下各点,点击对应标题页面将直接滑动到相应内容: 1:修改或去掉播放器前置logo 2:修改或去掉右上角的logo 3:修改.关闭.设置滚动文字广告 4:去掉右边的开关灯分享 ...
- 【Scala】Scala-循环与遍历
Scala-循环与遍历 scala for 1000_百度搜索 Scala 2.8的for表达式:性能与运行顺序的改进 - 51CTO.COM scala List集合的用法 - CSDN博客
- Linux系统性能优化
CPU性能评估 通过下面的命令能了解到CPU是否出现性能瓶颈,再结合top.ps等命令进一步检查,即可定位到那些进程导致CPU负载过大 vmstat命令:查看CPU负载. [blackfox@loca ...
- Mac下brew/memcached/nginx/iterm/zsh的安装
brew https://www.cnblogs.com/fireworld/p/8609190.html memcached https://blog.csdn.net/whereismatrix ...
- .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解
本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...