【前置条件】关闭数据业务
【操作步骤】发送彩信,或者接收彩信
【測试结果】无法发送彩信;收到彩信后无法下载内容

【预期结果】能够正常收发彩信

经过分析我们发现。因为发送彩信须要数据业务打开进行支持,数据业务关闭后,则无法发送彩信,因此我们为了不影响彩信业务,在彩信发送前对数据网络是否打开进行检測,假设数据业务设置为关闭状态,我们则打开数据业务进行彩信的发送。当彩信发送结束后我们在对关闭数据业务,保持数据业务原始的状态。

依据代码定位。彩信发送的业务逻辑主要集中在TransactionService类中。因此我们作出下面分析和改动:

private boolean isNetworkAvailable() {
        NetworkInfo ni = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
        return (ni == null ?

false : ni.isAvailable()) && mConnMgr.getMobileDataEnabled();
    }

上述代码中我们发现这种方法用来得到当前网络连接的服务和推断当前的网络状态是否可用,因为我们的改动目标为,彩信业务不再受当前数据业务的状态限制。因此我们改动为假设网络连接服务不为空,我们就可以进行彩信业务的收发:

private boolean isNetworkAvailable() {
        NetworkInfo ni = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
        return (ni == null ? false : true;
    }

以下这段代码是開始彩信业务的详细函数,红色部分为我们添加的部分,主要逻辑为首先得到当前网络连接设置的状态,而且保存状态(状态保存在MmsConfig类中),然后開始彩信业务的传送:

protected int beginMmsConnectivity() throws IOException {
        // Take a wake lock so we don't fall asleep before the message is downloaded.
        createWakeLock();

int result = mConnMgr.startUsingNetworkFeature(
                ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);

if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || DEBUG) {
            Log.v(TAG, "beginMmsConnectivity: result=" + result);
        }
         boolean bMobileDataEnabled = mConnMgr.getMobileDataEnabled();
         if (!bMobileDataEnabled ) {
                  MmsConfig.setDataConnectEnabled(false);
                  mConnMgr.setMobileDataEnabled(true);
                  mServiceHandler.sendEmptyMessageDelayed(EVENT_MMS_CONNECTIVITY_TIMEOUT, MMS_AUTO_OPEN_CONNECTIVITY_DELAY);
                  acquireWakeLock();
                  return Phone.APN_REQUEST_STARTED;//因为版本号问题这里假设找不到Phone这个类。能够试试PhoneConstants这个类
          }

        switch (result) {
            case Phone.APN_ALREADY_ACTIVE:
                acquireWakeLock();
                return result;
            case Phone.APN_REQUEST_STARTED:
                acquireWakeLock();
                mServiceHandler.sendEmptyMessageDelayed(EVENT_MMS_CONNECTIVITY_TIMEOUT, MMS_CONNECTIVITY_DELAY);
                /* Add 20120823 TS-FMC-V2 start */
                if (FeatureQuery.FEATURE_CT_FMC_SUPPORT) {
                    broadcastFmcConnectivity(WifiManager.FMC_MMS_START);
                }
                /* Add 20120823 TS-FMC-V2 end */
                return result;
        }

throw new IOException("Cannot establish MMS connectivity");
    }

这里补充一行代码:

private static final int MMS_AUTO_OPEN_CONNECTIVITY_DELAY = 1 * 1000;//设置延迟时间为1秒

以下这段代码是结束彩信业务的详细函数,红色部分为我们添加的部分。得到我们開始彩信业务前保存的状态,并恢复我们所保存的状态,并结束彩信业务(红色部分为我们加入的代码):

protected void endMmsConnectivity() {
        try {
            if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || DEBUG) {
                Log.v(TAG, "endMmsConnectivity");
            }
            if(mProcessing.isEmpty()){
                      if (!MmsConfig.getDataConnectEnabled()) {
                           MmsConfig.setDataConnectEnabled(true);
                           mConnMgr.setMobileDataEnabled(false);
                       }
            }

            // cancel timer for renewal of lease
            mServiceHandler.removeMessages(EVENT_CONTINUE_MMS_CONNECTIVITY);
            if (mConnMgr != null) {
                mConnMgr.stopUsingNetworkFeature(
                        ConnectivityManager.TYPE_MOBILE,
                        Phone.FEATURE_ENABLE_MMS);
                /* Add 20120823 TS-FMC-V2 start */
                if (FeatureQuery.FEATURE_CT_FMC_SUPPORT) {
                    broadcastFmcConnectivity(WifiManager.FMC_MMS_STOP);
                }
                /* Add 20120823 TS-FMC-V2 end */
            }
        } finally {
            releaseWakeLock();
        }
    }

这里我们贴出在MmsConfig类中保存当前数据连接状态(用来恢复数据连接状态)的代码:

private static boolean mDataConnectEnabled =true;

public static boolean getDataConnectEnabled() {
    return mDataConnectEnabled;
 }
 public static void setDataConnectEnabled(boolean bDataEnable) {
    mDataConnectEnabled = bDataEnable;
 }

本文所改动的两个类分别位于源代码中MMS应用下,这里改动后的两个java源代码文件已经打包上传至CSDN。有须要的朋友能够下载看看:点击打开链接

解决:关闭移动数据,接收彩信,不能成功接收下载彩信相关推荐

  1. C# 导入excel数据,解决关闭excel后不能释放资源的问题

    C# 导入excel数据,解决关闭excel后不能释放资源的问题 参考文章: (1)C# 导入excel数据,解决关闭excel后不能释放资源的问题 (2)https://www.cnblogs.co ...

  2. 云视通服务器关闭,云视通服务器连接成功,但数据失败

    满意答案 陌上初熏1224 2017.01.15 采纳率:49%    等级:9 已帮助:2715人 if(!handle){MessageBox(_T("绑定端口失败或者监听失败!&quo ...

  3. asp 采集不到数据,采集不成功 拒绝访问 msxml3.dll 错误 '80070005' 的解决方法

    asp 采集不到数据,采集不成功 拒绝访问 msxml3.dll 错误 '80070005' 的解决方法 用 MSXML2.ServerXMLHTTP 一定行,其他几个好像不怎么行. 另外一篇文章 采 ...

  4. 彩信发送和接收关键流程

    MMS 的设计基于WAP协议: DataConnection 手机上网数据连接,其中5种常用类型的APN配置信息中就有MMS类型,即收发彩信时需要建立手机上网数据连接: MMS发送和接收,就是Tran ...

  5. 利用物联网+数据建模+数据可视化软件等工具,解决物联网大数据在行业中的应用与挑战

    随着物联网的发展和进步,所有可以想象到的东西和行业都变得更加智能,智能家居和智慧城市.智慧水利.智能交通.智能制造.互联汽车.互联健康等等.无数能够收集和交换数据的事物正在形成一个全新的网络--物联网 ...

  6. 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(三,接收彩信2,下载彩信)

    彩信的接收简介: 主要是由应用程序负责从彩信服务中心(MMSC Multimedia Messaging Service Center)下载彩信信息.大致的流程是Frameworks会先发出一条短信, ...

  7. 联通iphone 4s 没有蜂窝数据设置菜单,无法正常发彩信

    联通iphone 4s 没有蜂窝数据设置菜单,无法正常发彩信   正常情况下,需要数据上网或是收发彩信可以在设置-通用-网络中找到"蜂窝数据网络"进行设置即可,但有些手机会少了一个 ...

  8. 如何解决回归任务数据不均衡的问题?

    摘要:现有的处理不平衡数据/长尾分布的方法绝大多数都是针对分类问题,而回归问题中出现的数据不均衡问题确极少被研究. 本文分享自华为云社区<如何解决回归任务数据不均衡的问题?>,原文作者:P ...

  9. ajax发送请求和数据返回,Ajax发送和接收请求

    首先Ajax的不刷新页面提交数据 基本上浏览器能接收的信息,Ajax都可以接收,ex:字符串,html标签,css标签,xml格式内容,json格式内容等等..... // IE浏览器 if(Acti ...

最新文章

  1. ruby json转化成对象_系统架构迁移实例:从Ruby到Rust
  2. C# 基础知识 (三).主子对话框数值传递
  3. Python应用实战-Clumper库 | 常用的数据操作函数
  4. 查看 rabbitmq 启动websocket 提示404_RabbitMQ在windows下安装(笔记)
  5. vscode php formatter mac配置_Mac上配置Vs code时,遇到的几个“坑”!
  6. ecshop ipdel.php,去除Ecshop后台调用api.ecshop.com官网后门代码
  7. 未来五年,谁将挑战德国太阳能擂主
  8. python小说全站爬虫_起点小说网全站爬虫(Python)
  9. 精品软件推荐 Desktop Central - Free Windows Admin Tools
  10. php private ,public protected三者的区别
  11. Python云端系统开发入门 pycharm代码
  12. 不拆机更换HG255D的U-BOOT并刷OPENWRT
  13. 计算机模拟仿真技术是什么,仿真与模拟
  14. 测试raid性能软件,IO性能测试-关于RAID不可不知的那些事儿
  15. 联想用u盘重装系统步骤_联想电脑怎样重新安装系统方法步骤详细教程 - 系统家园...
  16. 用Python获取磁力种子
  17. VBA和VBScript的AES加密算法
  18. ESP通过乐为物联控制灯,微信发送数值,ESP上传传感器数据
  19. python基础-列表
  20. 华为云容器镜像服务 SWR 加速镜像的拉取和推送

热门文章

  1. 如何将pdf多页插入word且保持插入内容的清晰度
  2. 计算机辅助制造中构图面,1试卷 计算机辅助制造技术
  3. 自己整理的一些《深入理解Java虚拟机》的知识点
  4. 5-1 厘米换算英尺英寸
  5. dnn降噪_EdiCall通话降噪黑科技-漫步者蓝牙耳机技术有多强?
  6. 关于在MFC使用PCL过程中的魔幻BUG
  7. 中兴交换机ZXR10-2950如何做mac地址和ip绑定端口?
  8. python编程调用设备串口发送数据
  9. idea 设置背景图片、护眼主题
  10. Linux_UNIX编程手册-读书笔记-第五十四章(POSIX共享内存)