先说一下思路,程序启动的时候先启动一个检测apn的类CheckApnForm,CheckApnForm可以做出动画或者简单的字样提示例如“检测网
络中请稍等。。。”,同时启动两个线程job,一个通过设置代理去连接服务器,一个直连服务器,将CheckApnForm的引用传给两个线程,当线程检
测成功或者失败,都要返回结果给CheckApnForm,然后通过最终的状态判断手机的网络设置时cmwap还是cmnet,然后程序中再需要连接网络
的地方就都要根据当前网络状态,选择是否设置代理。以下是代码:
(备注:可能高手看来不算什么,但是这个框架我在工作中一直都用到,而且非常好用,觉得原创,首次发布到dev.chinamobile.com,如果转
载希望可以表明出处和作者,如果工作中用到了就无所谓了,随便用)
public interface CheckAPN {
public final int ERROR=0;
public final int CMWAP=1;
public final int CMNET=2;
public final int CMWAP_ERROR=3;
public final int CMNET_ERROR=4;
public final int CMWAP_SUCCESS=5;
public final int CMNET_SUCCESS=6;
public void getAPN(int apn);
}
public class CheckApnForm implements CheckAPN{
private MIDlet midlet;
private Form f = null;
private Form nextForm = null;
public static int status=ERROR;
private int threadCount=0;
private String content="";
private Label label;
private boolean hasChecked=false;
public CheckApnForm(MIDlet midlet){
this.midlet=midlet;
f = new Form();
f.setTitle("检测网络状态");
f.setLayout(new BorderLayout());
label=new Label("正在检测网络类型......");
f.addComponent(BorderLayout.CENTER,label);
f.show();
f.repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
Thread t1=new CheckNetTread("t1",this,CMWAP);
Thread t2=new CheckNetTread("t2",this,CMNET);
t1.start();
t2.start();
}
public synchronized void getAPN(int apn) {
threadCount++;
if(apn>=5&&status<5){
status=apn;
}
if(!hasChecked){
//System.out.println(status);
if(status>=5){
hasChecked=true;
//Dialog.show("网络检测", ""+status, "确定", null);
System.gc();
LoginForm mainForm=new LoginForm(midlet);
nextForm=mainForm.getForm();
nextForm.show();
f.repaint();
return;
}else{
if(threadCount>=2){
label.setText("请退出,查看系统的网络连接配置");
content+="检测网络连接都失败!\r\n请检查系统网络连接配置\r\n";
Dialog.show("网络检测", content, "确定", null);
f.addCommand(new Command("退出",1));
f.addCommandListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
if(event.getCommand().getId()==1)
midlet.notifyDestroyed();
}
});
}
}
}
f.repaint();
}
public void msg(String msg) {
label.setText(msg);
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.http;
import com.gui.CheckAPN;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
/**
*
* @author Administrator
*/
public class CheckNetTread extends Thread{
private int apn;
private CheckAPN apnForm;
public CheckNetTread(String name,CheckAPN apnForm,int apn){
super(name);
this.apnForm=apnForm;
this.apn=apn;
}
public void run(){
HttpConnection conn = null;
try {
//System.out.println(this.getName()+" begin open url");
if(apn==CheckAPN.CMWAP){
conn = (HttpConnection)
Connector.open("http://10.0.0.172/",Connector.READ_WRITE,true);
conn.setRequestProperty("x-online-host",
"wap.baidu.com");
}else if(apn==CheckAPN.CMNET){
conn = (HttpConnection)
Connector.open("http://www.baidu.com/",Connector.READ_WRITE,true);
}
DataInputStream dis=conn.openDataInputStream();
//System.out.println(this.getName()+" open url over");
} catch (IOException ex) {
//System.out.println(this.getName()+" IOException,return");
if(apn==CheckAPN.CMWAP)
apnForm.getAPN(CheckAPN.CMWAP_ERROR);
else if(apn==CheckAPN.CMNET)
apnForm.getAPN(CheckAPN.CMNET_ERROR);
return;
}
if(apn==CheckAPN.CMWAP)
apnForm.getAPN(CheckAPN.CMWAP_SUCCESS);
else if(apn==CheckAPN.CMNET)
apnForm.getAPN(CheckAPN.CMNET_SUCCESS);
}
}
分享到:
相关推荐
1. **Apple Push Notification Service (APN)**: 这是苹果提供的一个后台服务,允许应用开发者将通知发送到已安装其应用的苹果设备上,即使应用没有运行也能收到通知。APN分为生产环境和开发环境,需要分别获取不同...
AT指令框架是嵌入式系统,尤其是微控制器(如STM32)与通信模块交互的一种标准方式。在STM32AT项目中,这种框架被设计用于简化STM32微控制器与各种通信模块(如GSM/GPRS、Wi-Fi或蓝牙模块)之间的通信。通过AT指令,...
为了完成这些测试,DKTest很可能是一个综合性的测试工具或框架。它可能提供了一套接口和功能,帮助测试工程师模拟拨号过程,检查网络连接,验证数据传输,并管理配置文件。DKTest可能还包含了自动化测试脚本,以提高...
- **网络连接管理**:客户端需要能够自动检测网络状态,重新连接或恢复连接在丢失后。 - **错误处理和重试机制**:考虑到无线通信的不稳定性,客户端需要有良好的错误处理机制和重试策略。 以上就是关于GPRS通信...
在Windows Mobile系统中进行GPRS联网开发是一项关键的技术任务,特别是在物联网、远程监控...通过`ConnectManager`类的实现,我们可以构建一个完整的GPRS联网框架,以满足移动设备在2G/2.5G网络环境下的数据通信需求。
3. **设置网络接口**:一旦驱动加载成功,Linux会创建一个新的网络接口,如`wwan0`。使用`ifconfig`或`ip link`命令查看和配置网络接口。 4. **激活网络连接**:使用`nmcli`或`wvdial`等工具,根据运营商的APN设置...
例如,可以创建一个模型事件监听器,当数据发生变化时自动发送通知。门面提供了简单的API,如`send()`方法,用于指定设备标识、通知标题和正文。 4. **处理设备令牌**: 在用户首次打开应用或重新安装应用时,应用会...
2. 设备识别:模块插入后,Linux会将其识别为一个USB设备。通过`lsusb`命令可以查看到设备信息,确认模块已被正确识别。 3. PPP配置:使用`pppd`工具创建PPP连接。配置文件中需要设定网络参数,如APN(接入点名称)...
在"**www.pudn.com.txt**"和"**GPRS开发包**"这两个文件中,"www.pudn.com.txt"可能是一个链接或说明文档,指向更多关于GPRS开发的资源。而"**GPRS开发包**"很可能是包含源代码、头文件、示例程序和其他辅助文件的...
"PushNotifications::dragon:一个macOS,Linux,Windows应用程序,用于在iOS和Android上测试推送通知" 这个标题表明我们讨论的是一个名为"PushNotifications"的应用程序,它是一个跨平台的工具,支持macOS、Linux...
又名“Android Tuner Pro” 最全面的工具箱,可以节省电池,调整,调整,备份,保护和监控运行任何ROM,任何内核(从Android ...* 2需要root和Xposed框架 警告:对移动设备进行生根和刷根可能会影响其性能或导致故障。
PPPD(Point-to-Point Protocol Daemon)是一个实现PPP协议的守护进程,用于在客户端与网络服务器之间建立点对点连接。在Android系统中,一旦通过串口成功连接Modem,用户就可以通过PPPD建立PPP会话,从而实现互联网...
【标题】:“调试成功文件java短信猫调试成功文件”揭示了一个关键的信息,即这个压缩包包含的是一些关于Java编程语言在调试短信猫设备过程中的成功案例或解决方案。短信猫通常指的是通过SIM卡接口实现短信收发功能...