μ₯μΉκ° μΈν°λ·μ μ°κ²°λμ΄ μλμ§ νμΈν΄μΌν©λλ€. λλ λ€μκ³Ό κ°μ λ§μ λ΅λ³μ λ°κ²¬νλ€.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(μμ 촬μ μλλ‘μ΄λμμ μ¬μ©ν μμλ μΈν°λ· μ°κ²°μ΄ μλμ§ μ¬λΆλ₯Ό κ°μ§ν©λλ€ .)
κ·Έλ¬λ μΈν°λ·μ μ‘μΈμ€ ν μμλ 무μ λ€νΈμν¬μ μ°κ²°λ κ²½μ°μ΄ λ°©λ²μ΄ λ§μ§ μμ΅λλ€ β¦μ΄ λ°©λ²μ trueλ₯Ό λ°νν©λλ€ β¦ μ₯μΉκ° μΈν°λ·μ μ°κ²°λμ΄ μκ³ μ°κ²°λμ΄ μμ§ μμμ§ μ μμλ λ°©λ²μ΄ μμ΅λκΉ λ¬΄μμΈκ°?
λ΅λ³
λ€ λ§μ΄ λ§μ μ 곡 ν μ½λλ λ€νΈμν¬ μ°κ²°μ΄ μλμ§ νμΈν©λλ€. μΈν°λ·μ μ°κ²°λμ΄ μλμ§ νμΈνλ κ°μ₯ μ’μ λ°©λ²μ httpλ₯Ό ν΅ν΄ μλ €μ§ μλ²μ μ°κ²°μ μλνλ κ²μ λλ€.
public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
}
} else {
Log.d(LOG_TAG, "No network available!");
}
return false;
}
λ¬Όλ‘ http://www.google.com
μ°κ²°νλ €λ λ€λ₯Έ μλ² λ κ°λ μκ°μ΄ μ’μ μλ²λ‘ λ체 ν μ μμ΅λλ€ .
Tony Choλ μλ μ£Όμ μμ μ§μ νλ―μ΄ λ©μΈ μ€λ λ μμμ΄ μ½λλ₯Ό μ€ννμ§ μμμΌν©λλ€. κ·Έλ μ§ μμΌλ©΄ NetworkOnMainThread μμΈκ° λ°μν©λλ€ (Android 3.0 μ΄μ). λμ AsyncTask λλ Runnableμ μ¬μ©νμμμ€.
google.comμ μ¬μ©νλ €λ©΄ Jeshurunμ μμ μ¬νμ νμΈν΄μΌν©λλ€. μ κ·Έμ λλ΅ κ·Έλ λ΄ μ½λλ₯Ό μμ νκ³ μ’ λ ν¨μ¨μ μΈνλ€. μ μ°κ²°νλ©΄
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
κ·Έλ° λ€μ 204μ λν μλ΅ μ½λλ₯Ό νμΈνμμμ€.
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
κ·Έλ° λ€μ μ 체 Google ννμ΄μ§λ₯Ό λ¨Όμ κ°μ Έμ¬ νμκ° μμ΅λλ€.
λ΅λ³
μ°κ²°λ WiFi λ€νΈμν¬μ μΈν°λ· μ‘μΈμ€κ° μλμ§ νμΈνκΈ° μν΄ Androidμμ μ΄λ―Έ μ¬μ©νλ μλ €μ§ ν΅μ μ¬μ©νλλ‘ THelperμ λ΅λ³μ μ½κ° μμ νμ΅λλ€. μ΄κ²μ μ 체 Google ννμ΄μ§λ₯Ό μ‘λ κ²λ³΄λ€ ν¨μ¬ ν¨μ¨μ μ λλ€. μμΈν λ΄μ©μ μ¬κΈ° λ° μ¬κΈ° λ₯Ό μ°Έμ‘° νμμμ€ .
public static boolean hasInternetAccess(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
urlc.setRequestProperty("User-Agent", "Android");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 204 &&
urlc.getContentLength() == 0);
} catch (IOException e) {
Log.e(TAG, "Error checking internet connection", e);
}
} else {
Log.d(TAG, "No network available!");
}
return false;
}
λ΅λ³
public boolean isInternetWorking() {
boolean success = false;
try {
URL url = new URL("https://google.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10000);
connection.connect();
success = connection.getResponseCode() == 200;
} catch (IOException e) {
e.printStackTrace();
}
return success;
}
μΈν°λ·μ μ€μ λ‘ μ¬μ©ν μ μμΌλ©΄ trueλ₯Ό λ°ν
μ΄ λ κ°μ§ κΆνμ΄ μλμ§ νμΈνμμμ€
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
httpκ° μλ‘μ΄ μλλ‘μ΄λ 보μμΌλ‘ μΈν΄ μλνμ§ μμΌλ©΄ μ΄μ μΌλ° ν μ€νΈ ν΅μ μ νμ©νμ§ μμ΅λλ€. μ§κΈμ κ·Έλ₯μ§λ μΉλ©΄λ©λλ€.
android : usesCleartextTraffic = βtrueβ
λ΅λ³
Lollipop μ΄μμ λμμΌλ‘νλ κ²½μ° μλ‘μ΄ NetworkCapabilities ν΄λμ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
public static boolean hasInternetConnection(final Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager)context.
getSystemService(Context.CONNECTIVITY_SERVICE);
final Network network = connectivityManager.getActiveNetwork();
final NetworkCapabilities capabilities = connectivityManager
.getNetworkCapabilities(network);
return capabilities != null
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
}
λ΅λ³
λ°λμ μ 체 HTTP μ°κ²°μ λ§λ€ νμλ μμ΅λλ€. μλ €μ§ νΈμ€νΈμ λν TCP μ°κ²°μ μ΄λ €κ³ μλνλ©΄ μΈν°λ·μ μ°κ²°λμ΄μλ κ²μ λλ€.
public boolean hostAvailable(String host, int port) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(host, port), 2000);
return true;
} catch (IOException e) {
// Either we have a timeout or unreachable host or failed DNS lookup
System.out.println(e);
return false;
}
}
κ·Έλ° λ€μ νμΈνμμμ€.
boolean online = hostAvailable("www.google.com", 80);
λ΅λ³
νμ© λ λ΅λ³μ κΈ°λ°μΌλ‘ 리μ€λ λ‘μ΄ ν΄λμ€λ₯Ό μμ±νμ¬ κΈ°λ³Έ μ€λ λμμ μ¬μ©ν μ μμ΅λλ€.
First : λ°±κ·ΈλΌμ΄λμμ μΈν°λ· μ°κ²°μ νμΈν InterntCheck ν΄λμ€λ κ²°κ³Όμ ν¨κ» 리μ€λ λ©μλλ₯Ό νΈμΆν©λλ€.
public class InternetCheck extends AsyncTask<Void, Void, Void> {
private Activity activity;
private InternetCheckListener listener;
public InternetCheck(Activity x){
activity= x;
}
@Override
protected Void doInBackground(Void... params) {
boolean b = hasInternetAccess();
listener.onComplete(b);
return null;
}
public void isInternetConnectionAvailable(InternetCheckListener x){
listener=x;
execute();
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) activity.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
private boolean hasInternetAccess() {
if (isNetworkAvailable()) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection());
urlc.setRequestProperty("User-Agent", "Android");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 204 &&
urlc.getContentLength() == 0);
} catch (IOException e) {
e.printStackTrace();
}
} else {
Log.d("TAG", "No network available!");
}
return false;
}
public interface InternetCheckListener{
void onComplete(boolean connected);
}
}
λμ§Έ : λ©μΈ μ€λ λμμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μΈμ€ν΄μ€ννκ³ μλ΅μ κΈ°λ€λ¦½λλ€ (Android μ© Firebase APIλ‘ μμ ν κ²½μ° μ΅μν΄μΌν©λλ€!).
new InternetCheck(activity).isInternetConnectionAvailable(new InternetCheck.InternetCheckListener() {
@Override
public void onComplete(boolean connected) {
//proceed!
}
});
μ΄μ onComplete λ©μλ λ΄λΆμμ μ₯μΉκ° μΈν°λ·μ μ°κ²°λμ΄ μλμ§ μ¬λΆλ₯Ό μ μ μμ΅λλ€.
λ΅λ³
μ΄κ±° νλ² ν΄λ΄
public class ConnectionDetector {
private Context _context;
public ConnectionDetector(Context context) {
this._context = context;
}
public boolean isConnectingToInternet() {
if (networkConnectivity()) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL(
"http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(3000);
urlc.setReadTimeout(4000);
urlc.connect();
// networkcode2 = urlc.getResponseCode();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
return (false);
}
} else
return false;
}
private boolean networkConnectivity() {
ConnectivityManager cm = (ConnectivityManager) _context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
}
λ§€λνμ€νΈ νμΌμ λ€μ κΆνμ μΆκ°ν΄μΌν©λλ€.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
κ·Έλ° λ€μ μ ννμμμ€.
if((new ConnectionDetector(MyService.this)).isConnectingToInternet()){
Log.d("internet status","Internet Access");
}else{
Log.d("internet status","no Internet Access");
}