2014-09-05 63 views
5

我正在研究一個圖像庫應用程序,其中應用程序正在從互聯網上檢索圖像。要求用戶連接到互聯網或退出應用程序(android)

所以我想提示一個對話框要求用戶連接到互聯網或退出應用程序。

向用戶顯示WiFi和運營商網絡選項。

+0

儘可能簡單,只需檢查是否有活動的網絡連接。如果不是,則顯示yes | no對話框。如果是肯定的,則顯示網絡設置。否則,完成活動。 – 2014-09-05 12:21:53

回答

5

這個檢查wifi和移動數據..運行在飛濺或你的主要活動檢查網絡connection.popup對話框,如果網絡沒有連接,並完成活動。就是這麼簡單

private boolean haveNetworkConnection() { 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       haveConnectedWifi = true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       haveConnectedMobile = true; 
    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 
+0

如果我想檢查每個片段(換句話說,在每個UI頁面)的互聯網連接怎麼辦。首先讓我點擊圖片,然後看到大圖,但現在如果互聯網連接丟失,我應該通知用戶。在哪裏放置此代碼,以便在所有屏幕上檢查互聯網連接? – user3705478 2016-10-07 07:42:41

+0

創建一個常用的util類並從那裏訪問它。您還可以創建一個廣播並隨時隨地收聽網絡更改。 – 2016-10-07 08:45:04

2

首先,你應該檢查自己是否已連接或沒有(噸例子如何做到這一點在線)

如果沒有,則使用此代碼爲兩個

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Connect to wifi or quit") 
.setCancelable(false) 
.setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
    } 
}) 
.setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     this.finish(); 
    } 
}); 
AlertDialog alert = builder.create(); 
alert.show(); 
1
//Checking For Internet Connection 
ConnectionDetector cd = new ConnectionDetector(getApplicationContext()); 

    // Check if Internet present 
    if (!cd.isConnectingToInternet()) { 
     // Internet Connection is not present 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Connect to wifi or quit") 
     .setCancelable(false) 
     .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int id) { 
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
       } 
     }) 
     .setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       this.finish(); 
     } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 

    return; 
    } 
+1

我們應該結合我們的答案大聲笑 – MobileMon 2014-09-05 12:27:37

+0

我一直在想....大聲笑.. – 2014-09-05 12:28:42

4

試試這個:

public static boolean isConnected(Context context){ 
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if ((wifiInfo != null && wifiInfo.isConnected()) || (mobileInfo != null && mobileInfo.isConnected())) { 
     return true; 
}else{ 
     showDialog(); 
     return false; 
} 

private void showDialog() 
{ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Connect to wifi or quit") 
     .setCancelable(false) 
     .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
      } 
     }) 
     .setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       this.finish(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
} 
+0

您複製了我的答案......... – MobileMon 2014-09-05 12:52:37

+0

是的......其中的一部分...... – 2014-09-05 12:54:11

+0

那麼爲什麼不編輯我的建築呢? – MobileMon 2014-09-05 13:54:27

0

這是它做的方式。

此類檢查有效的互聯網連接:

public class ConnectionStatus { 

    private Context _context; 

    public ConnectionStatus(Context context) { 
     this._context = context; 
    } 

    public boolean isConnectionAvailable() { 
     ConnectivityManager connectivity = (ConnectivityManager) _context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
         return true; 
        } 
     } 
     return false; 
    } 
} 

下面的方法打開了Wi-Fi面板,如果沒有有效的互聯網連接:

public void addListenerOnWifiButton() { 
     Button btnWifi = (Button)findViewById(R.id.btnWifi); 

     iia = new ConnectionStatus(getApplicationContext()); 

     isConnected = iia.isConnectionAvailable(); 
     if (!isConnected) { 
      btnWifi.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
        Toast.makeText(getBaseContext(), "Please connect to a hotspot", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
     else { 
      btnWifi.setVisibility(4); 
      warning.setText("This app may use your mobile data to update events and get their details."); 
     } 
    } 

下面的方法打開3G面板,如果沒有有效的互聯網連接:

public void addListenerOn3GButton() { 
    Button btnThreeGee = (Button)findViewById(R.id.btn3G); 
    iia = new ConnectionStatus(getApplicationContext()); 

    isConnected = iia.isConnectionAvailable(); 
    if (!isConnected) { 
     btnThreeGee.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); 
      Toast.makeText(getBaseContext(), "Please check 'Data enabled' option", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 
    else { 

     btnThreeGee.setVisibility(4); 
     cont.setVisibility(View.VISIBLE); 
     warning.setText("This app may use your mobile data to update events and get their details."); 
     } 
} 

希望這有助於:)

+0

嘿,你有沒有想過如何打開數據漫遊設置提示,對話框類型啓用/禁用類似於藍牙/ GPS提示?您的答案正常工作,但它會打開一個新的活動,而不是一個損害用戶體驗的小對話框。 – Razgriz 2016-04-27 13:07:22

+0

我認爲[this](http://stackoverflow.com/a/15456565/1116216)答案將幫助你實現你所需要的。 – 2016-04-27 13:37:08

+1

我的意思是會出現一個對話框,點擊確定/是/等會自動打開移動數據。與提示如何使用對話框打開藍牙相似,如果單擊是,藍牙將自動開啓。或者如何打開谷歌地圖顯示「允許此應用使用您的位置?」並點擊是將啓用您的位置設置。不是點擊是,並顯示一個新的活動。 – Razgriz 2016-04-27 13:49:05

相關問題