나는 인터넷과 계속 연결되어있는 Android 앱에서 작업 중입니다. 인터넷이 다운되면 적절한 메시지를 사용자에게 제공해야합니다.인터넷 수신기 Android 예제
인터넷 수신기와 같은 것이 있습니까? 또는 인터넷 연결이 불가능할 때 경고를 제공해야하는이 이벤트를 구현하는 방법.
나는 인터넷과 계속 연결되어있는 Android 앱에서 작업 중입니다. 인터넷이 다운되면 적절한 메시지를 사용자에게 제공해야합니다.인터넷 수신기 Android 예제
인터넷 수신기와 같은 것이 있습니까? 또는 인터넷 연결이 불가능할 때 경고를 제공해야하는이 이벤트를 구현하는 방법.
브로드 캐스트 수신기 하나를 만들어 매니페스트 파일에 등록하십시오.
먼저 새 클래스 NetworkStateReceiver
을 만들고 BroadcastReceiver를 확장하십시오. 단지
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
편집
이 코드는이 권한을
<receiver android:name=".NetworkStateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
을 그리고 추가
public class NetworkStateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d("app","Network connectivity change");
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
Log.i("app","Network "+ni.getTypeName()+" connected");
}
}
if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
Log.d("app","There's no network connectivity");
}
}
}
은 "응용 프로그램"요소 아래의 AndroidManifest.xml에이 코드를 넣어 연결 변경을 감지하지만이를 알 수는 없는지 여부 인터넷에 연결되어있는 네트워크에 인터넷이 연결되어 있습니다. 이 방법을 사용하여 다음을 확인하십시오. -
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://stackoverflow.com/questions/6176570/checking-the-networking-connectivity-using-broadcastreceiver-in-android – helios
나는이 해결책을 시도했지만 이것은 잘 작동하지 않았다. 또한 super.onReceive (context, intent)에서 에러를 준다; –
무엇이 오류입니까? –
위의 Chirag Raval 코드는 확실히 작동합니다. 문제는 애플리케이션이 포 그라운드에서 실행되지 않는 경우에도 리스너가 호출된다는 것입니다.
IMHO, 더 나은 방법은 모든 응용 프로그램 활동의 onResume()
/onPause()
방법으로 수신기를 등록/등록 취소하는 것입니다. 이 코드는 다음을 수행해야합니다.
private final NetworkStateReceiver stateReceiver = new NetworkStateReceiver();
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(stateReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(stateReceiver);
}
분명히 AndroidManifest.xml
파일에서 등록을 제거하십시오.
이 솔루션을 사용하면 응용 프로그램의 활동 간을 전환 할 때도 수신자가 호출됩니다 (종료한다고 가정 함). 이러한 경우, 아래의 예 (라고 online
)에 같은 정적 플래그를 (모든 활동 사이에 공유되는) 사용 : 오프라인되는 때 응용 프로그램을 시작하는 경우
public class NetworkStateReceiver extends BroadcastReceiver {
private static boolean online = true; // we expect the app being online when starting
public static final String TAG = NetworkStateReceiver.class.getSimpleName();
public void onReceive(Context context, Intent intent) {
Log.d(TAG,"Network connectivity change");
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
if (ni == null || ni.getState() != NetworkInfo.State.CONNECTED) {
Log.d(TAG,"There's no network connectivity");
if (online) // don't show the message if already offline
Toast.makeText(context, R.string.noInternet, Toast.LENGTH_SHORT).show();
online = false;
} else {
Log.d(TAG,"Network "+ni.getTypeName()+" connected");
if (!online) // don't show the message if already online
Toast.makeText(context, R.string.backOnline, Toast.LENGTH_SHORT).show();
online = true;
}
}
}
, 토스트 메시지가 나타납니다; 그렇지 않으면 연결이 끊어 지거나 다시 연결될 때만 나타납니다.
이 다른 Q & A가 도움이 될 수 : http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – helios
에 http : // 개발자 .android.com/training/monitoring-device-state/connectivity-monitoring.html 여기에서 샘플 –