大家好,请教一个问题:
我现在想写一个共通类,实现判断网络状态的方法:当网咯未连接时,提示用户设置网络,设置成功后,自动进行登录或者其它查询操作。目前代码的框架是这样的:
一.NetCheckReceiver.java(接受广播)public class NetCheckReceiver extends BroadcastReceiver{
//android 中网络变化时所发的Intent的名字
public static final String netACTION = "android.net.conn.CONNECTIVITY_CHANGE";
@Override
public void onReceive(Context context, Intent intent){
LoginSplashActivity loginsplashact=new LoginSplashActivity();
if(intent.getAction().equals(netACTION)){
//Intent中ConnectivityManager.EXTRA_NO_CONNECTIVITY这个关键字表示着当前是否连接上了网络
//true 代表网络断开 false 代表网络没有断开
boolean isBreak = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
// loginsplashact.startAuthThead(!isBreak);
}
}
}二. NetWorkStatus.java(判断网络状态并提示设置网络)public static boolean NetWorkStatus(final Activity context) {
boolean netSataus = false;
ConnectivityManager cwjManager = (ConnectivityManager) context
.getSystemService (Context.CONNECTIVITY_SERVICE);
cwjManager.getActiveNetworkInfo(); if (cwjManager.getActiveNetworkInfo() != null) {
netSataus = cwjManager.getActiveNetworkInfo().isAvailable();
} // 网络未连接情况,弹出设置网络对话框
if (netSataus == false) {
receiver = new NetStateReceiver();
IntentFilter filter = new IntentFilter();
// 为 BroadcastReceiver 指定 action ,使之用于接收同 action 的广播
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(receiver, filter);
android.app.AlertDialog.Builder b = new AlertDialog.Builder(context)
.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");
b.setPositiveButton("设置网络", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
Intent mIntent = new Intent();
ComponentName comp = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
mIntent.setComponent(comp);
mIntent.setAction("android.intent.action.VIEW");
context.startActivityForResult(mIntent, 0);
}
}); b.setNegativeButton("取消", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); }
});
b.show();
}
return netSataus;
}三.Login.java
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.login_splash);
tipTextView=(TextView) this.findViewById(R.id.text_tip);
isConnNetwork = NetWorkStatus.NetWorkStatus(LoginSplashActivity.this);
if(isConnNetwork)
{
startAuthThead();
}
}现在,已经实现了判断网络状态及提示设置网络功能,但是设置成功后不能自动继续向下进行。
请问怎样才能实现设置成功后不能自动继续向下进行?要修改NetCheckReceiver.java还是在Login.java中添加?注:NetCheckReceiver.java和NetWorkStatus.java饿要做成共通类,其它需要判断网络状态的地方直接调用这两个类。以上问题,希望大家帮忙,不胜感激。
我现在想写一个共通类,实现判断网络状态的方法:当网咯未连接时,提示用户设置网络,设置成功后,自动进行登录或者其它查询操作。目前代码的框架是这样的:
一.NetCheckReceiver.java(接受广播)public class NetCheckReceiver extends BroadcastReceiver{
//android 中网络变化时所发的Intent的名字
public static final String netACTION = "android.net.conn.CONNECTIVITY_CHANGE";
@Override
public void onReceive(Context context, Intent intent){
LoginSplashActivity loginsplashact=new LoginSplashActivity();
if(intent.getAction().equals(netACTION)){
//Intent中ConnectivityManager.EXTRA_NO_CONNECTIVITY这个关键字表示着当前是否连接上了网络
//true 代表网络断开 false 代表网络没有断开
boolean isBreak = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
// loginsplashact.startAuthThead(!isBreak);
}
}
}二. NetWorkStatus.java(判断网络状态并提示设置网络)public static boolean NetWorkStatus(final Activity context) {
boolean netSataus = false;
ConnectivityManager cwjManager = (ConnectivityManager) context
.getSystemService (Context.CONNECTIVITY_SERVICE);
cwjManager.getActiveNetworkInfo(); if (cwjManager.getActiveNetworkInfo() != null) {
netSataus = cwjManager.getActiveNetworkInfo().isAvailable();
} // 网络未连接情况,弹出设置网络对话框
if (netSataus == false) {
receiver = new NetStateReceiver();
IntentFilter filter = new IntentFilter();
// 为 BroadcastReceiver 指定 action ,使之用于接收同 action 的广播
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(receiver, filter);
android.app.AlertDialog.Builder b = new AlertDialog.Builder(context)
.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");
b.setPositiveButton("设置网络", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
Intent mIntent = new Intent();
ComponentName comp = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
mIntent.setComponent(comp);
mIntent.setAction("android.intent.action.VIEW");
context.startActivityForResult(mIntent, 0);
}
}); b.setNegativeButton("取消", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); }
});
b.show();
}
return netSataus;
}三.Login.java
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.login_splash);
tipTextView=(TextView) this.findViewById(R.id.text_tip);
isConnNetwork = NetWorkStatus.NetWorkStatus(LoginSplashActivity.this);
if(isConnNetwork)
{
startAuthThead();
}
}现在,已经实现了判断网络状态及提示设置网络功能,但是设置成功后不能自动继续向下进行。
请问怎样才能实现设置成功后不能自动继续向下进行?要修改NetCheckReceiver.java还是在Login.java中添加?注:NetCheckReceiver.java和NetWorkStatus.java饿要做成共通类,其它需要判断网络状态的地方直接调用这两个类。以上问题,希望大家帮忙,不胜感激。
解决方案 »
- 【求助用过Droidbox的大神】
- android webview 加载了一个本地的html问题
- 申请Andriod google map api的时候的。。网页能打开,可是总是申请不成功。
- 获取edittext的内容时,返回无意义的数字
- android2.1 使用自己变得SDK,用eclipse创建工程,没有R.java
- android使用mediaRecorder录制视频问题
- android 下载进度显示问题
- adb命令安装apk出现的问题
- 关于seekbar的拖动问题
- 那些c++搞android 的,后来都怎么样了。
- android 系统源码中(或Android应用程序中)如何调用C语言代码?
- google map Javascipt api on andoird,有没有能运行的例子。
(对于已预置有提示的,直接在launcher中不管)对于客户自己下载的使用网络的业务流量apk我们是不需要管的,也管不鸟。
如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
isConnNetwork = NetWorkStatus.CheckNetState(LoginSplashActivity.this); if (isConnNetwork ==true) {
startAuthThead();
}
else
{
return;
}
}CheckNetState是类NetWorkStatus中的一个方法,CheckNetState方法里面实现的是判断网络状态,提示设置网络
如下:
public static boolean NetWorkStatus(final Activity context) {
boolean netSataus = false; ConnectivityManager cwjManager = (ConnectivityManager) context
.getSystemService (Context.CONNECTIVITY_SERVICE);
cwjManager.getActiveNetworkInfo(); if (cwjManager.getActiveNetworkInfo() != null) {
netSataus = cwjManager.getActiveNetworkInfo().isAvailable();
} // 网络未连接情况,弹出设置网络对话框
if (netSataus == false) {
android.app.AlertDialog.Builder b = new AlertDialog.Builder(context)
.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");
b.setPositiveButton("设置网络", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
Intent mIntent = new Intent();
ComponentName comp = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
mIntent.setComponent(comp);
mIntent.putExtra("mIntent",mIntent);
mIntent.setAction("android.intent.action.VIEW");
context.startActivityForResult(mIntent, 100);
}
}); b.setNegativeButton("取消", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); }
});
b.show();
}
return netSataus;
}
问题是:在设置网络状态后,执行onActivityResult判断网络时,获取不到最新的网络状态,在设置断点的时候,才能在CheckNetState中取得最新网络状态(应该是等待了一段时间就能获取到了)或者在onActivityResult开始时先sleep几秒钟后,再获取网络状态也能取得到,但是我不想用这种方式实现。
请问是什么原因使得不能立刻获取到网络状态呢?要怎么做?请多多指教。