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

【前置条件】关闭数据业务

【操作步骤】发送彩信,或者接收彩信

【測试结果】无法发送彩信;收到彩信后无法下载内容

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

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

依据代码定位。彩信发送的业务逻辑主要集中在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。有须要的朋友能够下载看看:点击打开链接

时间: 2024-08-10 23:29:37

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

SELINUX导致数据修改权限不成功

SELINUX导致数据修改权限不成功基本概念参考:https://blog.csdn.net/yanjun821126/article/details/80828908 查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2.getenforce ##也可以用这个命令检查 关闭SELinux: 1.临时关闭(不用重启机器): setenforce 0 ##设

如何解决机器学习中数据不平衡问题

作者:无影随想 时间:2016年1月. 出处:http://www.zhaokv.com/2016/01/learning-from-imbalanced-data.html 声明:版权所有,转载请联系作者并注明出处 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值.与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难.数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一. 一.数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是

php 解决MySQL插入数据出现 Incorrect string value: '\xF0\x9F\x92\x8BTi...'错误

在项目中向MySQL插入数据时,发现数据插入不完整,通过调试,发现插入语句也没什么特殊的错误.但是就是差不进去,于是就打开mysqli错误的调试 $ret = mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn)); 结果弹出如下错误信息: Incorrect string value: '\xF0\x9F\x92\x8BTi...' 有错误信息就好办了,结果上网一查结果是:mysql编码格式utf-8格式,不支持带四

解决js获取数据跨域问题,jsonP

网上说了一些jsonp的示例,感觉都没用,最后研究了一下,调用腾讯的一个api.最后要加output=jsonp&callback=?这个,比较适用. var url = "http://apis.map.qq.com/ws/place/v1/search?boundary=nearby(39.908491,116.374328,1000)&keyword=%E6%88%90%E9%83%BD&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

BCP SQL导出EXCEL常见问题及解决方法;数据导出存储过程

一.'xp_cmdshell'的启用 SQL Server阻止了对组件'xp_cmdshell'的过程'sys.xp_cmdshell'的访问.因为此组件已作为此服务嚣安全配置的一部分而被关 闭.系统管理员可以通过使用sp_configure启用'xp_cmdshell'.有关启用'xp_cmdshell'的详细信息 解决方法: 1.通过SQL语句开启.[推荐此方法,因为在任何版本的SQL SERVER中都可以使用.]通过查询分析器,选择Master数据库,然后执行以下SQL内容: sp_con

jdbc如何优雅的解决字典表数据转化

我们在做数据库设计的时候肯定会用字典表或者说枚举表等固化数据,那么当查询数据的时候用到了这些字典值的时候我们会怎么做呢.以下举个栗子吧,不对应该是好几个栗子 字典表(PUB_RESTRICTION) SERIAL_NO DESC_ID DESC_CHINA KEYWORD 67550001 1 城区 AREA_TYPE 67550002 2 郊区 AREA_TYPE 67550003 3 县城 AREA_TYPE 67550004 4 乡镇 AREA_TYPE 用户表(MANA_USER) US

解决阿里云数据导入自建数据库过程中,导入出错的问题

解决阿里云数据导入自建数据库过程中,导入出错的问题 mysql配置改进:vim /etc/my/cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock secure_file_priv='' max_allowed_packet = 10M character-set-server = utf8mb4 collation-server = utf8mb4_general_ci #collation-server =

打开操作系统数据执行保护,关闭操作系统数据执行保护

大家好,最近写医疗设备上位机软件比较多,难免会跟医院的lis和his系统对接,在对接的过程本人觉得不是很难,要配置的东西有点多,就譬如与lis系统的一个zfbarcode.dll 打开操作系统数据执行保护, bcdedit.exe/set nx optin 如果 关闭操作系统数据执行保护 在命令(管理员)行下执行命令“bcdedit.exe /set nx alwaysoff”,重启Windows 如果关闭不了在命令(管理员)行下执行命令“bcdedit /set nx alwaysoff”,重

【转】搞定单片机多字节串口接收(串口多字节接收发送的高阶研究)

搞定单片机多字节串口接收(串口多字节接收发送的高阶研究) 原文地址:http://bbs.ednchina.com/BLOG_ARTICLE_3007162.HTM 工作了一年多,写了不少单片机串口程序.感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说,是有点难度的——寄存器配置基本上都是死的,串口回复多字节跟回复一字节只是多了一个循环. 串口接收程序是基于串口中断的,单片机的串口每次接收到一字节数据产生一次中断,然后再读取某个寄存器就可以得到串口接收的数据了.然而在实际应用当中,基本