大家好,请教一个问题:
我现在想写一个共通类,实现判断网络状态的方法:当网咯未连接时,提示用户设置网络,设置成功后,自动进行登录或者其它查询操作。目前代码的框架是这样的:
一.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饿要做成共通类,其它需要判断网络状态的地方直接调用这两个类。以上问题,希望大家帮忙,不胜感激。

解决方案 »

  1.   

    建议直接在源码launcher中加入对已预置的需要网络的应用启动包名,  使用网络的业务流量收费提示,增加定制分离!   同时在Settings中增加一个关闭网络业务流量收费提示的接口。    让客户手动关闭后,不提示!
    (对于已预置有提示的,直接在launcher中不管)对于客户自己下载的使用网络的业务流量apk我们是不需要管的,也管不鸟。     
      

  2.   

    我在一个Activity里面使用onActivityResult方法,在这个方法里面调用另一个类的函数判断网络状态,如果网络连接,继续进行:
    如下:
    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几秒钟后,再获取网络状态也能取得到,但是我不想用这种方式实现。
    请问是什么原因使得不能立刻获取到网络状态呢?要怎么做?请多多指教。