import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
/**
* 接入点自动判断
* 简化操作,不采用同时启动cmnet,cmwap尝试连接
* 先使用cmnet连接,如果连接不上,再使用cmwap连接
* 如果还是失败,重试上面操作一次,避免网络不好引起的错误
* @author tim
*
*/
public class CheckWapOrNet{
/**
* 代理标记
*/
private boolean isProxy = false;
/**
* 是否连接成功
*/
private boolean isSucceed = false;
/**
* 标记用户是否已经确认连接,即安全提示的对话框
*/
private boolean isSelect = false;
/**
* 10秒钟的超时时间
*/
private long overtime = 10000l;
/**
* 如果开始连接,记录下当时的时间
*/
private long selectTime;
private String cmnetUrl = "http://wap.google.cn";
private String cmwapUrl = "http://10.0.0.172:80";
/**
* 当前连接
*/
private HttpConnection conn = null;
/**
* 定时检查当前的连接是否已经超时
*/
Timer timer = new Timer();
/**
* 尝试是否已经结束
*/
private boolean checkEnd = false;
public CheckWapOrNet(){
String defaultAPN = RMSTools.getAPN();
if(defaultAPN.equals(RMSTools.CMNET))
isProxy = false;
else
isProxy = true;
TimerTask task = new TimerTask(){
public void run() {
long currentTime = System.currentTimeMillis();
if(isSelect && currentTime - selectTime >= overtime){//连接超时,停止连接
closeConntion();
}
}
};
//每2秒检查当前的连接是否已经超时
timer.schedule(task, 500, 2000);
}
public void start() {
int index = 1;
//如果连接没有成功,cmnet,cmwap切换重试4次
while(!isSucceed && index <=4){
check_Conn();
closeConntion();
timer.cancel();
if(!isSucceed){
isProxy = !isProxy;
}
index++;
}
checkEnd = true;
}
private void check_Conn(){
try{
isSelect = false;
if(isProxy){
conn = (HttpConnection)Connector.open(cmwapUrl,Connector.READ,true);
conn.setRequestProperty("X-Online-Host", cmwapUrl);
}else{
conn = (HttpConnection)Connector.open(cmnetUrl,Connector.READ,true);
}
conn.setRequestMethod(HttpConnection.GET);
isSelect = true;
selectTime = System.currentTimeMillis();
int responseCode = conn.getResponseCode();
isSucceed = true;
if(isProxy){
RMSTools.saveAPN(RMSTools.CMWAP);
}else{
RMSTools.saveAPN(RMSTools.CMNET);
}
}
catch(IOException e){
e.printStackTrace();
isSucceed = false;
}catch(SecurityException se){
se.printStackTrace();
isSucceed = false;
}
finally{
if(conn != null){
try {
conn.close();
conn = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void closeConntion(){
if(conn != null){
try {
conn.close();
conn = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
public boolean isProxy() throws Exception {
if(!checkEnd){
throw new Exception("Check CMNET/CMWAP Connection Is Not Finish");
}
return isProxy;
}
public boolean isCheckEnd() throws Exception {
if(!isSucceed){
throw new Exception("Check CMNET/CMWAP Connection Failed");
}
return checkEnd;
}
}
cmnet && cmwap自动判断代码备份
最新推荐文章于 2012-11-09 09:55:00 发布