Android에서 사용할 수 있는 인터넷 연결이 있는지 탐지
안드로이드 기기가 인터넷에 연결되어 있는지 확인해야 합니다.
그NetworkInfo
이지 않은 방법을 합니다.isAvailable()
완벽하게 들리네요.
문제는 다음과 같습니다.
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
다음 오류가 발생합니다.
The constructor NetworkInfo is not visible.
은 실한것다반환다는클른것있다입니다는래가스확하음을 반환하는 다른 가 있다는 입니다.NetworkInfo
◦하지만 하지만 어느 쪽인지는 모르겠어요.
- 위의 코드 조각을 작동시키는 방법은 무엇입니까?
- 온라인 문서에서 필요한 정보를 어떻게 찾을 수 있었을까요?
- 이러한 유형의 탐지에 대한 더 나은 방법을 제안할 수 있습니까?
그getActiveNetworkInfo()
의 ConnectivityManager
를 반환합니다.NetworkInfo
찾을 수 있는 첫 번째 연결된 네트워크 인터페이스를 나타내는 인스턴스 또는null
연결된 인터페이스가 없는 경우이 메서드가 반환되는지 확인하는 중null
인터넷 연결을 사용할 수 있는지 여부를 확인할 수 있습니다.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager != null ? connectivityManager.getActiveNetworkInfo() : null;
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
또한 다음이 필요합니다.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
당신의 안드로이드 매니페스트에서.
편집:
활성 네트워크 인터페이스가 있다고 해서 특정 네트워크 서비스를 사용할 수 있는 것은 아닙니다.네트워크 문제, 서버 다운타임, 낮은 신호, 제한된 포털, 콘텐츠 필터 등은 모두 앱이 서버에 도달하는 것을 방해할 수 있습니다.예를 들어, 트위터 서비스로부터 유효한 응답을 받기 전에는 앱이 트위터에 도달할 수 있는지 확실히 알 수 없습니다.
와이파이와 모바일 인터넷을 다음과 같이 확인합니다.
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;
}
물론, 앱이 제대로 작동하기 위해 잠재적으로 더 빠른 속도의 Wi-Fi가 필요한 경우 등과 같이 개별 특정 연결 유형을 확인하기 위해 쉽게 수정할 수 있습니다.
1단계: 프로젝트에 AppStatus 클래스를 만듭니다(다른 이름도 지정할 수 있습니다).그런 다음 아래의 행을 코드에 붙여넣으십시오.
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class AppStatus {
private static AppStatus instance = new AppStatus();
static Context context;
ConnectivityManager connectivityManager;
NetworkInfo wifiInfo, mobileInfo;
boolean connected = false;
public static AppStatus getInstance(Context ctx) {
context = ctx.getApplicationContext();
return instance;
}
public boolean isOnline() {
try {
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
connected = networkInfo != null && networkInfo.isAvailable() &&
networkInfo.isConnected();
return connected;
} catch (Exception e) {
System.out.println("CheckConnectivity Exception: " + e.getMessage());
Log.v("connectivity", e.toString());
}
return connected;
}
}
2단계: 이제 장치가 네트워크에 연결되어 있는지 확인한 후 이 코드 조각을 확인할 위치에 추가하십시오.
if (AppStatus.getInstance(this).isOnline()) {
Toast.makeText(this,"You are online!!!!",8000).show();
} else {
Toast.makeText(this,"You are not online!!!!",8000).show();
Log.v("Home", "############################You are not online!!!!");
}
또 하나의 중요한 메모입니다.은 야해합니다설을 설정해야 .android.permission.ACCESS_NETWORK_STATE
AndroidManifest.xml에서 이 작업을 수행할 수 있습니다.
_ 온라인 문서에서 필요한 정보를 어떻게 찾을 수 있었을까요?
강의에 대한 설명서를 제대로 읽기만 하면 원하는 모든 답을 찾을 수 있습니다.연결 관리자에서 설명서를 확인하십시오.설명을 통해 수행할 작업을 알 수 있습니다.
ConnectivityManager의 getActiveNetworkInfo() 메서드는 찾을 수 있는 첫 번째 연결된 네트워크 인터페이스를 나타내는 NetworkInfo 인스턴스를 반환합니다. 인터페이스가 연결되어 있지 않으면 null입니다.이 메서드가 null을 반환하는지 확인하면 인터넷 연결을 사용할 수 있는지 확인할 수 있습니다.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
또한 다음이 필요합니다.
당신의 안드로이드 매니페스트에서.
편집:
활성 네트워크 인터페이스가 있다고 해서 특정 네트워크 서비스를 사용할 수 있는 것은 아닙니다.네트워크 문제, 서버 다운타임, 낮은 신호, 제한된 포털, 콘텐츠 필터 등은 모두 앱이 서버에 도달하는 것을 방해할 수 있습니다.예를 들어, 트위터 서비스로부터 유효한 응답을 받기 전에는 앱이 트위터에 도달할 수 있는지 확실히 알 수 없습니다.
getActiveNetworkInfo()는 null을 지정하면 안 됩니다.저는 그들이 그것을 생각했을 때 무슨 생각을 하고 있었는지 모릅니다.그것은 항상 당신에게 목적을 주어야 합니다.
아마도 나는 내 자신을 발견했을 것입니다.
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
언급URL : https://stackoverflow.com/questions/4238921/detect-whether-there-is-an-internet-connection-available-on-android
'source' 카테고리의 다른 글
FCM에 대한 올바른 토큰 검색 방법 - iOS 10 Swift 3 (0) | 2023.07.05 |
---|---|
R에서 CRAN 미러를 선택하는 방법 (0) | 2023.07.05 |
제공된 호스트 및 포트에서 MongoDB에 연결할 수 없습니다. (0) | 2023.06.30 |
git로 이름이 바뀐 파일의 로그를 실제로 표시하는 방법 (0) | 2023.06.30 |
ssh를 통해 MongoDB 동기화 (0) | 2023.06.30 |