android发送彩信
WorkingMessage获取将要发送的短信:
首先刷新收信人,然后创建SmsMessageSender类并调用sendMessage()发送短信。
- private void sendSmsWorker(String msgText, String semiSepRecipients, long threadId, int simId) {
- String[] dests = TextUtils.split(semiSepRecipients, ";");
- MessageSender sender = new SmsMessageSender(mActivity, dests, msgText, threadId);
- // 双卡支持 @{
- sender.setSimId(simId);
- // @}
- try {
- sender.sendMessage(threadId);//调用SmsMessageSender的sendMessage方法发送短信
- // 确认该线程没有超过最大短信数
- Recycler.getSmsRecycler().deleteOldMessagesByThreadId(mActivity, threadId);
- } catch (Exception e) {
- Log.e(TAG, "Failed to send SMS message, threadId=" + threadId, e);
- }
- mStatusListener.onMessageSent();
- MmsWidgetProvider.notifyDatasetChanged(mActivity);
- /// M:
- SmsReceiverService.sSmsSent = false;
- }
- }
在sendMessage()方法中实际调用queueMessage(),相当于将短信加入到发送队列。看看queueMessage()的实现。
- private boolean queueMessage(long token) throws MmsException {
- if ((mMessageText == null) || "".equals(mMessageText.trim()) || (mNumberOfDests == 0)) {
- // 不允许发送空短信
- throw new MmsException("Null message body or dest.");
- }
- for (int i = 0; i < mNumberOfDests; i++) {
- try {//将短信添加到数据库
- EncapsulatedTelephony.Sms.addMessageToUri(mContext.getContentResolver(),
- Uri.parse("content://sms/queued"), mDests[i],
- mMessageText, null, mTimestamp,
- true /* read */,
- requestDeliveryReport,
- mThreadId,
- mSimId);
- } catch (SQLiteException e) {
- SqliteWrapper.checkSQLiteException(mContext, e);
- }
- }
- //为发送信息添加广播通知,实时反馈短信发送状态
- Intent sentIt = new Intent(SmsReceiverService.ACTION_SEND_MESSAGE, null, mContext,
- SmsReceiver.class);
- mContext.sendBroadcast(sentIt);
- return false;
- }
彩信的发送相对复杂,WorkingMessage获取将要发送的彩信,刷新联系人,再生成彩信可发送的pdu,存入数据库。创建MmsMessageSender并存入彩信发送的uri。
- private void sendMmsWorker(Conversation conv, Uri mmsUri,
- PduPersister persister, SlideshowModel slideshow, SendReq sendReq,
- int simId) {
- long threadId = 0;
- Cursor cursor = null;
- boolean newMessage = false;
- try {
- // 首先将彩信存入数据库
- DraftCache.getInstance().setSavingDraft(true);
- mStatusListener.onPreMessageSent();
- // 确认接收彩信人id.
- threadId = conv.ensureThreadId();
- // 确认接收者地址.
- String[] dests = conv.getRecipients().getNumbers(true);
- if (dests.length == 1) {
- // 确认地址与数据库中匹配,如果不匹配需要更新SendReq.
- String newAddress = Conversation.verifySingleRecipient(
- mActivity, conv.getThreadId(), dests[0]);
- if (!newAddress.equals(dests[0])) {
- dests[0] = newAddress;
- EncodedStringValue[] encodedNumbers = EncodedStringValue
- .encodeStrings(dests);
- if (encodedNumbers != null) {
- sendReq.setTo(encodedNumbers);
- }
- }
- }
- newMessage = mmsUri == null;
- if (newMessage {
- // 显示彩信的正在发送状态
- ContentValues values = new ContentValues();
- values.put(Mms.MESSAGE_BOX, Mms.MESSAGE_BOX_OUTBOX);
- values.put(Mms.THREAD_ID, threadId);
- values.put(Mms.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ);
- // 双卡支持. @{
- values.put(EncapsulatedTelephony.Mms.SIM_ID, simId);
- // / @}
- mmsUri = SqliteWrapper.insert(mActivity, mContentResolver,
- Mms.Outbox.CONTENT_URI, values);
- }
- mStatusListener.onMessageSent();
- // 确认试图发送的信息.
- UserHappinessSignals.userAcceptedImeText(mActivity);
- // 确认不能有太多未发送信息.
- cursor = SqliteWrapper.query(mActivity, mContentResolver,
- Mms.Outbox.CONTENT_URI, MMS_OUTBOX_PROJECTION, null, null,
- null);
- if (cursor != null) {
- long maxMessageSize = MmsConfig
- .getMaxSizeScaleForPendingMmsAllowed() *
- // / M: change google default. @{
- MmsConfig.getUserSetMmsSizeLimit(true);
- // / @}
- long totalPendingSize = 0;
- while (cursor.moveToNext()) {
- // / M: change google default. @{
- if (PduHeaders.STATUS_UNREACHABLE != cursor
- .getLong(MMS_MESSAGE_STATUS_INDEX)) {
- totalPendingSize += cursor
- .getLong(MMS_MESSAGE_SIZE_INDEX);
- }
- // / @}
- }
- if (totalPendingSize >= maxMessageSize) {
- unDiscard(); // 允许将发送失败彩信保存为草稿.
- mStatusListener.onMaxPendingMessagesReached();
- markMmsMessageWithError(mmsUri);
- return;
- }
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- try {
- if (newMessage) {
- // 如果还没有创建新彩信,创建一个.
- mmsUri = createDraftMmsMessage(persister, sendReq, slideshow,
- mmsUri, mActivity);
- } else {
- // 或者同步正在编辑的彩信.
- updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq);
- }
- // 删除彩信草稿.
- deleteDraftSmsMessage(threadId);
- } finally {
- DraftCache.getInstance().setSavingDraft(false);
- }
- // 将已发送彩信设置为丢弃状态.
- mDiscarded = true;
- try {
- MessageSender sender = new MmsMessageSender(mActivity, mmsUri,
- slideshow.getCurrentSlideshowSize());
- // 双卡支持. @{
- sender.setSimId(simId);
- // / @}
- if (!sender.sendMessage(threadId)) {
- // 信息通过sms协议发送,需要删除保存在彩信草稿中的副本.
- SqliteWrapper.delete(mActivity, mContentResolver, mmsUri, null,
- null);
- }
- // 确保未超过最大短信数
- Recycler.getMmsRecycler().deleteOldMessagesByThreadId(mActivity,
- threadId);
- } catch (Exception e) {
- Log.e(TAG, "Failed to send message: " + mmsUri + ", threadId="
- + threadId, e);
- }
- MmsWidgetProvider.notifyDatasetChanged(mActivity);
- SendTransaction.sMMSSent = false;
- }
android发送彩信相关推荐
- Android 发送彩信
一.调用系统UI发送 Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.parse("mms://")); sendIn ...
- android 发送彩信监听,在Android中发送短信和彩信,监听短信并显示
发送短信: String body="this is sms demo"; Intent mmsintent = new Intent(Intent.ACTION_SENDTO, ...
- android 发送彩信监听,第74章、再识Intent-调用发送彩信程序(从零开始学Android)...
一.设计界面 1.布局文件 打开res/layout/activity_main.xml文件. 输入以下代码: xmlns:android="http://schemas.android.c ...
- Android发送彩信(带图片附件)
public static void sendSMS(Context c) {PaintController.save2Cache(c);// 先把图片保存,再调用系统自带的SMSString img ...
- Android开发笔记(一百七十六)借助FileProvider发送彩信
通过系统相册固然可以获得照片的路径对象,却无法知晓更多的详细信息,例如图片名称.文件大小.文件路径等等都不知道,也就无法进行个性化的定制开发.为了把更多的文件信息开放出来,Android设计了专门的媒 ...
- Android短信开发 发送彩信 ‘ 高通源码 ‘ (彩信发送过程1)
Android彩信发送有下面几个类: 一个一个类看 : 1 . ComposeMessageActivity.java 详情页面 2 . WoringMessage.java ...
- android 实现发送彩信方法 (MMS)
最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager smsMan ...
- android 实现发送彩信,android 实现发送彩信方法 (MMS)
最近有个突然有个想法,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager sm ...
- android 实现发送彩信方法 (mms),非调用,android 实现发送彩信方法 (MMS),非调用系统界面...
最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager smsMan ...
最新文章
- VMDNS服务器未响应,vmware克隆虚拟机后进行网络配置
- java 方法继承方法_Java继承和方法重写
- git / 如何将其他分支的某些 commit 合并到当前分支中?
- RxJava学习-使用篇
- 在SAP UI5应用里使用jQuery.ajax读取数据并显示在页面上
- HTML常见标签总结
- dump分析工具_Java应用CPU过高,如何排查?参考解决思路和常用工具总结
- Python小白的数学建模课-22.插值方法
- c语言答案知码,C语言笔试习题集答案和解析.doc
- 基于.NET Compact Framework的应用程序和库汇总
- 抓取知网摘要、搜狗微信文章、搜狗新闻的爬虫
- echarts饼图南丁格尔玫瑰图属性设置
- 改造create-react-app 引入dva和antd
- 分享 outlook 附件被禁止访问的解决方法
- 百度云有关Token
- 天梵古法健康知识普及:足阳明胃经经穴
- 华为怎么改输入法皮肤_怎么设置华为手机输入法皮肤
- 京鱼座智能屏i8 Pro“强势出道”,重新思考智能音箱的产业坐标系
- 我居然被TransmittableThreadLocal框架作者评论了
- css opacity影响子元素解决办法