2013-01-08 104 views
1

在我的应用程序中,我总是通过互联网连接到openfire服务器。现在,如果连接中断或断开连接,我希望它应该弹出一个按钮,然后按OK按钮,它应该重新登录该人员(与连接到服务器的连接丢失 - 即使1秒钟该人员断开)。Android后台服务或接收器在后台检查互联网连接

我米使用下面的代码:

public class ConnectionCheck extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
     NetworkInfo mobileNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(activeNetInfo!=null){ 
      Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT).show(); 
     } 

     if(mobileNetInfo != null) 
      { 
       Toast.makeText(context, "Mobile Network Type : " + mobileNetInfo.getTypeName(), Toast.LENGTH_SHORT).show(); 
      } 

    } 

假设当无线网络连接断开,再次连接到移动网络(但内部用户没有连接到服务器)

我应该怎么做对于相同的情况,即当用户断开连接时 - 即使距服务器一秒钟,它应该弹出一个窗口。

有没有可能?

感谢

回答

3

-你上面的代码只检查你的Android设备的连接切换至无线路由或手机的数据分组业务,但不会检查如果WiFi真的有互联网连接工作与否。

-我曾经击中找到这个解决方案时,我工作的一个项目,我试图寻找它在计算器的解决方案,但我得到的是一段代码,就像你的。 所以我创建了我自己的解决方案。

我需要的时候做一些定制work..but得到它和运行...

我的代码切换来自WiFi移动网络的关闭。

,我使用的端口37 TimeService知道,互联网是死的,而wifi连接仍然打开

现在我在这里把一个完整的工作代码,我做了。请原谅我作为DRY(不要重复自己的原则)已被滥用在这里。所以,请在生产网络

/////---------------------------Intial Available Network Checking 



private boolean checkConnection(){ 


boolean connected = false; 
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

if (cm != null) { 
NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 

for (NetworkInfo ni : netInfo) { 
if ((ni.getTypeName().equalsIgnoreCase("WIFI") 
|| ni.getTypeName().equalsIgnoreCase("MOBILE")) 
& ni.isConnected() & ni.isAvailable()) { 
connected = true; 
    } 

    } 
} 


return connected; 
} /////---------------------------Intial Available Network Checking 

/////使用时重构代码和重复码转换成方法,即到single sensible place,--------------- ----------------检查工作Internet连接

public boolean inetAddr(){ 

    boolean x1 = false; 


    try { 
     Socket s = new Socket("utcnist.colorado.edu", 37); 

     InputStream i = s.getInputStream(); 

     Scanner scan = new Scanner(i); 

     while(scan.hasNextLine()){ 

      System.out.println(scan.nextLine()); 
      x1 = true; 
     } 
    } catch (Exception e) { 


      x1 = false; 
    } 

    return x1; 

} 

/////-------------------------------Check for the working Internet Connection 


////-------------------------------Check Mobile Conectivity Again 

public boolean mobileConnect(){ 

    boolean conn = false; 
    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNet = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if(activeNet != null){ 

     conn = true; 
    }else{ 

     conn = false; 
    } 

    return conn; 



} 

////------------------------------Check Mobile Conectivity Again 

我在这里使用上述方法....

try{  
    if (!checkConnection()){ 


     AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(YumZingSplashActivity.this); 
     myAlertDialog.setTitle("--- Connectivity Check ---"); 
     myAlertDialog.setMessage("No Internet Connectivity"); 
     myAlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 

      YumZingSplashActivity.this.finish(); 
      //splashHandler.removeCallbacks(launcherRunnable); 

      }}); 
      System.out.println("No Internet Connectivity"); 

      myAlertDialog.show();   




     } 
     else{ 


       if(inetAddr()){ 
      aphandle = APIHandling.getInstance(); 
      aphandle.xmlCreateSession(); 
      System.out.println("Net Connectivity is Present"); 
      DURATION = Integer.valueOf(getString(R.string.splash_duration)); 



      splashHandler = new Handler(); 

      // ================ Main Code of the Application 
      launcherRunnable = new Runnable() { 

       public void run() { 
        Intent i = new Intent(YumZingSplashActivity.this, YumZingTabHostActivity.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(i); 
        YumZingSplashActivity.this.finish(); 
       } 
      }; 
      if (DEBUG) 
      { 
       splashHandler.post(launcherRunnable); 
      } 
      else{ 


       splashHandler.postDelayed(launcherRunnable, DURATION); 
      } 

     } 
       else{ 

        if(mobileConnect()){ 


         if(inetAddr()){ 
         aphandle = APIHandling.getInstance(); 
         aphandle.xmlCreateSession(); 
         System.out.println("Net Connectivity is Present"); 
         DURATION = Integer.valueOf(getString(R.string.splash_duration)); 



         splashHandler = new Handler(); 

         // ================ Main Code of the Application 
         launcherRunnable = new Runnable() { 

          public void run() { 
           Intent i = new Intent(YumZingSplashActivity.this, YumZingTabHostActivity.class); 
           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
           startActivity(i); 
           YumZingSplashActivity.this.finish(); 
          } 
         }; 
         if (DEBUG) 
         { 
          splashHandler.post(launcherRunnable); 
         } 
         else{ 


          splashHandler.postDelayed(launcherRunnable, DURATION); 
         } 
         }else{ 

          AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(YumZingSplashActivity.this); 
         myAlertDialog.setTitle("--- Connectivity Check ---"); 
         myAlertDialog.setMessage("No Internet Connectivity"); 
         myAlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface arg0, int arg1) { 

          YumZingSplashActivity.this.finish(); 
          //splashHandler.removeCallbacks(launcherRunnable); 

          }}); 
          System.out.println("No Internet Connectivity"); 

          myAlertDialog.show();  
         } 
        }else{ 




         AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(YumZingSplashActivity.this); 
         myAlertDialog.setTitle("--- Connectivity Check ---"); 
         myAlertDialog.setMessage("No Internet Connectivity"); 
         myAlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface arg0, int arg1) { 

          YumZingSplashActivity.this.finish(); 
          //splashHandler.removeCallbacks(launcherRunnable); 

          }}); 
          System.out.println("No Internet Connectivity"); 

          myAlertDialog.show();   






        } 

       } 
     } 

    //setContentView(R.layout.yumzing_splash_layout); 
    } catch(Exception ex){ 

      System.out.println("Leak ko catch"); 
     } 



    } 
+0

我应该在哪里写代码?在广播接收机? –

+0

@GauravArora @GauravArora我通常在通过互联网拨打电话之前使用此代码,因此您可以在那里使用它以防止不必要的开销,或者如果您希望可以在广播接收器中使用此代码,但那会稍微重一点..... –

+1

但我的情况下,如果不同的兄弟。我想检查所有的时间,因为我的应用程序总是连接到服务器。如果它没有连接到服务器,那么我必须弹出一个弹出框 –

2

你也可以试试这个服务类。只需设置以秒为单位的时间间隔和URL到平:

Android Check Internet Connection

只要记住服务添加到清单文件,并添加权限