2011年7月 的存档
2011七月31

Android开发:休眠唤醒或开机后cmwap/cmnet网络不能连接的解决办法

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;
		}
	}

}
2011七月31

拜访新客户

今天准备拜访一新客户,打电话联系到对方问在哪儿,答:“在麦当劳。”我为了套近乎说了句客气话:“嘿,老哥儿吃什么好吃的呢,我都闻到香味了。”对方答:“正在卫生间排队呢!”

2011七月30

诺基亚和他老婆西门子

晚上,诺基亚和他老婆西门子晚饭吃了些火腿肠(HTC),还有苹果、黑莓等水果后,骑着摩托(罗拉)去一家三星级酒店“休息”。老婆向老公(LG)暗示“索爱”,联想到等下要发生的事情,他们窃窃说了些只有他们才听得懂的天语……接下来的几年,他们有了两个女儿:夏普和夏新,还有两个儿子:多普达和普莱达…

2011七月29

飞行模式

无意间发现我的iPhone居然有飞行模式,这可乐坏我了,我打开飞行模式,哈了一口气,往天上用力一扔……

2011七月27

信息费

王老板外出度假,临走前担心家中被盗,便在客厅桌上放了一百块钱并给小偷留一纸条:您别费神了,我们家我都找不到钱,您更找不到,这一百块钱给您零花。隔壁他们家是铁道部的,有钱而且还不敢报案。等度假回来,王老板发现桌子上的钱变成了两千!在他留给小偷的纸条的反面写着:给您的信息费,请笑纳。

2011七月25

中国,请停下你飞奔的脚步,等一等你的人民, 等一等你的灵魂

专栏作家童大焕如此评价高铁事故“中国,请停下你飞奔的脚步,等一等你的人民, 等一等你的灵魂,等一等你的道德,等一等你的良知!不要让列车脱轨,不要让桥梁坍塌,不要让道路成陷阱,不要让房屋成危楼。慢点走,让每一个生命都有自由和尊严,每一个人都不被“时代”抛下,每一个人都顺利平安地抵达终点。”

2011七月22

买虾

和朋友去超市买虾,问售货员有没有新鲜的,售货员说这虾没死只是在冬眠,然后问我们买多少?我对朋友说咱们走吧,不打扰它们休息了。。。当时我看到售货员表情非常凝重。。。

2011七月21

我能吃你么

虎:我能吃你么? 兔:你没吃过兔子么?虎:今天妈妈不在家…… 兔:那你以前吃什么?虎:…… 兔:大点声!虎:吃奶~

2011七月20

脑筋急转弯

某会委员发言:“上海是全世界的上海,上海的房价应该和国际接轨。我觉得80后男孩子如果买不起房子,80后女孩子可以嫁给40岁的男人。 80后的男人如果有条件了,到40岁再娶20岁的女孩子也是不错的选择。”
【2楼】回复: 我终于到40岁了,找到一个年轻貌美的20岁女友 去她家见家长。开门的是当年读大学时相处了几年的初恋女友 新女友喊了一声:妈~
【3楼】补充:她妈看到我,惊得倒吸一口冷气。没等我反应过来,然后把女儿拉进房间里,对女儿说“你不能和他在一起,他是你亲生父亲啊!”
【4楼】继续补充: 女儿:我已经有了他的骨肉……
【5楼】 这时女孩的60多岁的父亲走出来看见了女孩的男友,小声的对他说:“你怎么来了,给你妈和你的生活费不是每月都按时打去的吗?
【6楼】这时”叮咚”,女孩男友的妈来见亲家,见到女孩的父亲:”怎么是你…”
【7楼】女孩男友的父亲停完车也上楼了,一见女孩的父亲马上泪流满面:”你不就是我失散多年的弟弟吗?”
【8楼】女孩母亲见到男友母亲:”妈!”
【9楼】女孩母亲见到男友他爸,叫了一声“爹!”,立刻晕厥过去
请问——
1、你能理解到几楼?
2、男友他妈的妈见到女友他妈的爸叫什么?

2011七月19

程序员最讨厌康熙的哪个儿子

问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)。