铁道部推广
二战中期,美国降落伞质量不够好,合格率99.9%,意味着1000个跳伞士兵,可能一个士兵因为降落伞质量而送命。军方要求100%,厂家表示无法完美,后军方改变检测方法,从降落伞中随机抽一个出来,让厂家负责人跳伞,不合格率顿变为零。可在铁道部推广此法。
二战中期,美国降落伞质量不够好,合格率99.9%,意味着1000个跳伞士兵,可能一个士兵因为降落伞质量而送命。军方要求100%,厂家表示无法完美,后军方改变检测方法,从降落伞中随机抽一个出来,让厂家负责人跳伞,不合格率顿变为零。可在铁道部推广此法。
Android手机(移动GSM)在休眠或开机后不能成功启用网络链接(设置都正常),有时候甚至状态栏图标是连接的,但网络依旧不可用。
如下解决方法,不知可通用,但测试HTC野火手机移动版可使用:
(被这个问题折腾死了,从本站相关文章可以看到,之前尝试了APN切换也不行,估计是网络enable==false)
package com.wiz.tools; import java.lang.reflect.Method; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.telephony.TelephonyManager; import android.util.Log; /** * Wizzer.cn * @author Wizzer * */ public class NetCheck { public static final Uri APN_URI = Uri.parse("content://telephony/carriers"); public static final Uri DEFAULTAPN_URI = Uri .parse("content://telephony/carriers/restore"); public static final Uri CURRENT_APN_URI = Uri .parse("content://telephony/carriers/preferapn"); public static Context c1; public static String getCurrentAPNFromSetting(ContentResolver resolver) { Cursor cursor = null; try { cursor = resolver.query(CURRENT_APN_URI, null, null, null, null); String curApnId = null; String apnName1 = null; if (cursor != null && cursor.moveToFirst()) { curApnId = cursor.getString(cursor.getColumnIndex("_id")); apnName1 = cursor.getString(cursor.getColumnIndex("apn")); } Log.e("NetCheck getCurrentAPNFromSetting", "curApnId:" + curApnId + " apnName1:" + apnName1); // find apn name from apn list if (curApnId != null) { cursor = resolver.query(APN_URI, null, " _id = ?", new String[] { curApnId }, null); if (cursor != null && cursor.moveToFirst()) { String apnName = cursor.getString(cursor .getColumnIndex("apn")); return apnName; } } } catch (SQLException e) { Log.e("NetCheck getCurrentAPNFromSetting", e.getMessage()); } finally { if (cursor != null) { cursor.close(); } } return null; } public static int updateCurrentAPN(ContentResolver resolver, String newAPN) { Cursor cursor = null; try { // get new apn id from list cursor = resolver.query(APN_URI, null, " apn = ? and current = 1", new String[] { newAPN.toLowerCase() }, null); String apnId = null; if (cursor != null && cursor.moveToFirst()) { apnId = cursor.getString(cursor.getColumnIndex("_id")); } Log.e("NetCheck updateCurrentAPN", "apnId:" + apnId); // set new apn id as chosen one if (apnId != null) { ContentValues values = new ContentValues(); values.put("apn_id", apnId); resolver.update(CURRENT_APN_URI, values, null, null); } else { // apn id not found, return 0. return 0; } } catch (SQLException e) { Log.e("NetCheck updateCurrentAPN", e.getMessage()); } finally { if (cursor != null) { cursor.close(); } } // update success return 1; } public String getApn(Context c) { boolean netSataus = false; ConnectivityManager conManager = (ConnectivityManager) c .getSystemService(Context.CONNECTIVITY_SERVICE); if (conManager.getActiveNetworkInfo() != null) { netSataus = conManager.getActiveNetworkInfo().isAvailable(); } NetworkInfo info = conManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); String oldAPN = StringUtils.null2String(info.getExtraInfo()); Log .e("NetCheck getApn", "oldAPN:" + oldAPN + " netSataus:" + netSataus); if (netSataus == false) { Log.e("NetCheck getApn", "setMobileDataEnabled(true)"); setMobileDataEnabled(c, true); try { Thread.sleep(4012); } catch (InterruptedException e) { e.printStackTrace(); } } if("".equals(oldAPN)){ updateCurrentAPN(c.getContentResolver(), "cmnet"); try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } } info = conManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); oldAPN = StringUtils.null2String(info.getExtraInfo()); Log .e("NetCheck getApn", "newApn:" + oldAPN); return oldAPN.toLowerCase(); } public boolean setMobileDataEnabled(Context c, boolean enabled) { final TelephonyManager mTelManager; mTelManager = (TelephonyManager) c .getSystemService(Context.TELEPHONY_SERVICE); try { Method m = mTelManager.getClass() .getDeclaredMethod("getITelephony"); m.setAccessible(true); Object telephony = m.invoke(mTelManager); m = telephony.getClass().getMethod( (enabled ? "enable" : "disable") + "DataConnectivity"); m.invoke(telephony); return true; } catch (Exception e) { Log.e("NetCheck ", "cannot fake telephony", e); return false; } } }
今天准备拜访一新客户,打电话联系到对方问在哪儿,答:“在麦当劳。”我为了套近乎说了句客气话:“嘿,老哥儿吃什么好吃的呢,我都闻到香味了。”对方答:“正在卫生间排队呢!”
晚上,诺基亚和他老婆西门子晚饭吃了些火腿肠(HTC),还有苹果、黑莓等水果后,骑着摩托(罗拉)去一家三星级酒店“休息”。老婆向老公(LG)暗示“索爱”,联想到等下要发生的事情,他们窃窃说了些只有他们才听得懂的天语……接下来的几年,他们有了两个女儿:夏普和夏新,还有两个儿子:多普达和普莱达…
专栏作家童大焕如此评价高铁事故“中国,请停下你飞奔的脚步,等一等你的人民, 等一等你的灵魂,等一等你的道德,等一等你的良知!不要让列车脱轨,不要让桥梁坍塌,不要让道路成陷阱,不要让房屋成危楼。慢点走,让每一个生命都有自由和尊严,每一个人都不被“时代”抛下,每一个人都顺利平安地抵达终点。”
某会委员发言:“上海是全世界的上海,上海的房价应该和国际接轨。我觉得80后男孩子如果买不起房子,80后女孩子可以嫁给40岁的男人。 80后的男人如果有条件了,到40岁再娶20岁的女孩子也是不错的选择。”
【2楼】回复: 我终于到40岁了,找到一个年轻貌美的20岁女友 去她家见家长。开门的是当年读大学时相处了几年的初恋女友 新女友喊了一声:妈~
【3楼】补充:她妈看到我,惊得倒吸一口冷气。没等我反应过来,然后把女儿拉进房间里,对女儿说“你不能和他在一起,他是你亲生父亲啊!”
【4楼】继续补充: 女儿:我已经有了他的骨肉……
【5楼】 这时女孩的60多岁的父亲走出来看见了女孩的男友,小声的对他说:“你怎么来了,给你妈和你的生活费不是每月都按时打去的吗?
【6楼】这时”叮咚”,女孩男友的妈来见亲家,见到女孩的父亲:”怎么是你…”
【7楼】女孩男友的父亲停完车也上楼了,一见女孩的父亲马上泪流满面:”你不就是我失散多年的弟弟吗?”
【8楼】女孩母亲见到男友母亲:”妈!”
【9楼】女孩母亲见到男友他爸,叫了一声“爹!”,立刻晕厥过去
请问——
1、你能理解到几楼?
2、男友他妈的妈见到女友他妈的爸叫什么?
最近被Android系统的APN自动切换网络问题折腾死了,软件使用CMNET网络,而系统自带的一些软件必须使用CMWAP,或者手机厂家搞的一些后台服务或者流氓软件总是在切换网络。没办法,只好想个解决之道了。
我的解决方案是:
1、在程序启动时,注册 Receiver 监视网络状态,当网络发生变化判断不是CMNET时则切换网络;
2、为了保险起见,在每个HTTP链接请求前加上网络判断。
本软件主要实现了功能如下:
拍照、定位、表单文件上传、查询、短信拦截(用于通过短信指令获得手机当前位置)、拨打电话、定时自动上传定位数据、版本更新等。
如下粘贴APN网络判断网站代码:
1、NetworkChangeReceiver 网络状态监视
package com.wiz.receiver; import com.wiz.tools.NetCheck; import com.wiz.tools.StringUtils; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; public class NetworkChangeReceiver extends BroadcastReceiver { NetCheck netCheck=new NetCheck(); public void onReceive(Context context, Intent intent) { Log.e("NetworkChangeReceiver", "onReceive"); ConnectivityManager conManager= (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { NetworkInfo info = conManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); String apn = StringUtils.null2String(info.getExtraInfo()); if (!"cmnet".equals(apn.toLowerCase())) { netCheck.checkNetworkInfo(context); } } } }
2、Activity 中注册 NetworkChangeReceiver
NetworkChangeReceiver ncr = new NetworkChangeReceiver(); IntentFilter upIntentFilter = new IntentFilter( ConnectivityManager.CONNECTIVITY_ACTION); this.registerReceiver(ncr, upIntentFilter);// 网络状态监控
3、APN判断及网络切换
package com.wiz.tools; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.util.Log; public class NetCheck { public static final Uri APN_URI = Uri.parse("content://telephony/carriers"); public static final Uri CURRENT_APN_URI = Uri .parse("content://telephony/carriers/preferapn"); public static String getCurrentAPNFromSetting(ContentResolver resolver) { Cursor cursor = null; try { cursor = resolver.query(CURRENT_APN_URI, null, null, null, null); String curApnId = null; String apnName1=null; if (cursor != null && cursor.moveToFirst()) { curApnId = cursor.getString(cursor.getColumnIndex("_id")); apnName1 = cursor.getString(cursor.getColumnIndex("apn")); } cursor.close(); Log.e("NetCheck getCurrentAPNFromSetting","curApnId:"+curApnId+" apnName1:"+apnName1); //find apn name from apn list if (curApnId != null) { cursor = resolver.query(APN_URI, null, " _id = ?", new String[]{curApnId}, null); if (cursor != null && cursor.moveToFirst()) { String apnName = cursor.getString(cursor.getColumnIndex("apn")); return apnName; } } } catch (SQLException e) { Log.e("NetCheck getCurrentAPNFromSetting",e.getMessage()); } finally { if (cursor != null) { cursor.close(); } } return null; } public static int updateCurrentAPN(ContentResolver resolver, String newAPN) { Cursor cursor = null; try { //get new apn id from list cursor = resolver.query(APN_URI, null, " apn = ? and current = 1", new String[]{newAPN.toLowerCase()}, null); String apnId = null; if (cursor != null && cursor.moveToFirst()) { apnId = cursor.getString(cursor.getColumnIndex("_id")); } cursor.close(); Log.e("NetCheck updateCurrentAPN","apnId:"+apnId); //set new apn id as chosen one if (apnId != null) { ContentValues values = new ContentValues(); values.put("apn_id", apnId); resolver.update(CURRENT_APN_URI, values, null, null); } else { //apn id not found, return 0. return 0; } } catch (SQLException e) { Log.e("NetCheck updateCurrentAPN",e.getMessage()); } finally { if (cursor != null) { cursor.close(); } } //update success return 1; } public boolean checkNetworkInfo(Context c) { boolean ret=false; ConnectivityManager conManager= (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = conManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); boolean internet=conManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting(); String oldAPN = StringUtils.null2String(info.getExtraInfo()); String oldSQLAPN=StringUtils.null2String(getCurrentAPNFromSetting(c.getContentResolver())); Log.e("NetCheck checkNetworkInfo","oldAPN:"+oldAPN+" oldSQLAPN:"+oldSQLAPN); if (internet==false||!"cmnet".equals(oldAPN.toLowerCase())||!"cmnet".equals(oldSQLAPN.toLowerCase())) { if("cmwap".equals(oldAPN.toLowerCase())&&"cmnet".equals(oldSQLAPN.toLowerCase())){ updateCurrentAPN(c.getContentResolver(), "cmwap"); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } updateCurrentAPN(c.getContentResolver(), "cmnet"); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } ret=true; } return ret; } }
4、HTTP请求前的判断
if (nc.checkNetworkInfo(LoginActivity.this)) { Thread.sleep(5000);// 设置cmnet网络 }
本文原创,转载请注明来源 wizzer.cn。
九点睡是村里人,十点睡是厂里人,十一点睡是校内人,十二点睡是官府人,一点睡是IT人,两点睡是IT人,三点睡是IT人,四点睡是IT人,五点睡是IT人,六点睡是IT人,总是睡不够的还是IT人。
走出机场的时候,航空哭的一塌糊涂。人们都目瞪口呆的看着这么一个漂亮的男孩子哭的梨花带雨。高铁不顾旁人的眼光,一把揽过他,凶狠狠的说“再哭我就当众吻你。”航空哭的更厉害了:“准点好难,我们不能同时到北京啦!”“笨蛋,就知道你晚点,我开到中间就停电啦!”(via@陈少宇_GRE_GMAT )
公司里,发现一女同事的QQ签名写道:“你五毛我五毛,那么咱俩就能一块了!” 我看后赞叹不已,觉得这个签名很经典。 突然,另一女同事说:“你六毛我六毛咱俩就能一块2了!” 紧接着,又有一女同事说:“你七毛我七毛,咱俩就能一块死了!” 汗,一个比一个经典啊!!
新生入学不久的时候,有个小孩第一次来办公室,告完状还挺有礼貌的跟我说:老师再见!我说:办公室这么多老师呢!你得说老师们再见。孩子愣了半天,然后冲我说:老师再见!然后走到门边,对着门说:门,再见!