Android开发:休眠唤醒或开机后cmwap/cmnet网络不能连接的解决办法
来源:互联网 发布:网络编程学校 编辑:程序博客网 时间:2024/04/29 04:51
Android手机(移动GSM)在休眠或开机后不能成功启用网络链接(设置都正常),有时候甚至状态栏图标是连接的,但网络依旧不可用。
如下解决方法,不知可通用,但测试HTC野火手机移动版可使用:
(被这个问题折腾死了,从本站相关文章可以看到,之前尝试了APN切换也不行,估计是网络enable==false)
import java.lang.reflect.Method;004 005import android.content.ContentResolver;006import android.content.ContentValues;007import android.content.Context;008import android.database.Cursor;009import android.database.SQLException;010import android.net.ConnectivityManager;011import android.net.NetworkInfo;012import android.net.Uri;013import android.telephony.TelephonyManager;014import android.util.Log;015/**016 * Wizzer.cn017 * @author Wizzer018 *019 */020public class NetCheck {021 public static final Uri APN_URI = Uri.parse("content://telephony/carriers");022 public static final Uri DEFAULTAPN_URI = Uri023 .parse("content://telephony/carriers/restore");024 public static final Uri CURRENT_APN_URI = Uri025 .parse("content://telephony/carriers/preferapn");026 public static Context c1;027 028 public static String getCurrentAPNFromSetting(ContentResolver resolver) {029 Cursor cursor = null;030 try {031 cursor = resolver.query(CURRENT_APN_URI, null, null, null, null);032 String curApnId = null;033 String apnName1 = null;034 if (cursor != null && cursor.moveToFirst()) {035 curApnId = cursor.getString(cursor.getColumnIndex("_id"));036 apnName1 = cursor.getString(cursor.getColumnIndex("apn"));037 }038 Log.e("NetCheck getCurrentAPNFromSetting", "curApnId:" + curApnId039 + " apnName1:" + apnName1);040 // find apn name from apn list041 if (curApnId != null) {042 cursor = resolver.query(APN_URI, null, " _id = ?",043 new String[] { curApnId }, null);044 if (cursor != null && cursor.moveToFirst()) {045 String apnName = cursor.getString(cursor046 .getColumnIndex("apn"));047 return apnName;048 }049 }050 051 } catch (SQLException e) {052 Log.e("NetCheck getCurrentAPNFromSetting", e.getMessage());053 } finally {054 if (cursor != null) {055 cursor.close();056 }057 }058 059 return null;060 }061 062 public static int updateCurrentAPN(ContentResolver resolver, String newAPN) {063 Cursor cursor = null;064 try {065 // get new apn id from list066 cursor = resolver.query(APN_URI, null, " apn = ? and current = 1",067 new String[] { newAPN.toLowerCase() }, null);068 String apnId = null;069 if (cursor != null && cursor.moveToFirst()) {070 apnId = cursor.getString(cursor.getColumnIndex("_id"));071 }072 Log.e("NetCheck updateCurrentAPN", "apnId:" + apnId);073 // set new apn id as chosen one074 if (apnId != null) {075 ContentValues values = new ContentValues();076 values.put("apn_id", apnId);077 resolver.update(CURRENT_APN_URI, values, null, null);078 } else {079 // apn id not found, return 0.080 return 0;081 }082 } catch (SQLException e) {083 Log.e("NetCheck updateCurrentAPN", e.getMessage());084 } finally {085 if (cursor != null) {086 cursor.close();087 }088 }089 090 // update success091 return 1;092 }093 094 public String getApn(Context c) {095 boolean netSataus = false;096 097 ConnectivityManager conManager = (ConnectivityManager) c098 .getSystemService(Context.CONNECTIVITY_SERVICE);099 if (conManager.getActiveNetworkInfo() != null) {100 netSataus = conManager.getActiveNetworkInfo().isAvailable();101 102 }103 NetworkInfo info = conManager104 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);105 String oldAPN = StringUtils.null2String(info.getExtraInfo());106 Log107 .e("NetCheck getApn", "oldAPN:" + oldAPN + " netSataus:"108 + netSataus);109 if (netSataus == false) {110 Log.e("NetCheck getApn", "setMobileDataEnabled(true)");111 setMobileDataEnabled(c, true); 112 113 try {114 Thread.sleep(4012);115 } catch (InterruptedException e) {116 e.printStackTrace();117 }118 }119 if("".equals(oldAPN)){120 updateCurrentAPN(c.getContentResolver(), "cmnet");121 try {122 Thread.sleep(1500);123 } catch (InterruptedException e) {124 e.printStackTrace();125 }126 }127 info = conManager128 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);129 oldAPN = StringUtils.null2String(info.getExtraInfo());130 Log131 .e("NetCheck getApn", "newApn:" + oldAPN);132 return oldAPN.toLowerCase();133 }134 135 public boolean setMobileDataEnabled(Context c, boolean enabled) {136 final TelephonyManager mTelManager;137 mTelManager = (TelephonyManager) c138 .getSystemService(Context.TELEPHONY_SERVICE);139 try {140 141 Method m = mTelManager.getClass()142 .getDeclaredMethod("getITelephony");143 m.setAccessible(true);144 Object telephony = m.invoke(mTelManager);145 m = telephony.getClass().getMethod(146 (enabled ? "enable" : "disable") + "DataConnectivity");147 m.invoke(telephony);148 return true;149 } catch (Exception e) {150 Log.e("NetCheck ", "cannot fake telephony", e);151 return false;152 }153 }154 155}
- Android开发:休眠唤醒或开机后cmwap/cmnet网络不能连接的解决办法
- Android网络连接Wifi和cmnet及cmwap的问题
- CMNET和CMWAP网络连接
- CMNET和CMWAP网络连接
- CMNET和CMWAP网络连接
- CMNET和CMWAP网络连接
- CMNET和CMWAP网络连接
- CMNET和CMWAP网络连接
- Ubuntu休眠后不能唤醒
- android CMWAP CMNET
- GPRS网络连接类型(cmwap/cmnet)程序判断
- Android 判断当前网络 wifi ctwap(cmwap) ctnet(cmnet)
- 无法连接服务器——CMNET与CMWAP的区别
- 中国移动CMnet和CMwap两种网络的区别?
- cmwap和cmnet的网速
- CMWAP和CMNET的区别
- cmwap与cmnet的区别
- cmnet和cmwap的区别
- Looper和Handler
- android中Logcat的TAG过滤
- 获取当前经纬度方法
- poj2516
- 框架入门1-struts2准备与原理
- Android开发:休眠唤醒或开机后cmwap/cmnet网络不能连接的解决办法
- 学习字节流
- 源代码
- MVC
- 第十二章 Java流与文件操作
- 常用数据结构1——单链表(单链表的创建、)
- 流的分类和继承关系及Eclipse的快捷键
- 流分类与InputStream类和OutputStream类
- Download images stored on the R/3 document server (Uploaded by SE78)