2016-09-13 1 views
1

저는 Android에서 새로운 꿀벌입니다. Wi-Fi가 연결된 상태에서 인터넷 연결이 끊어져도 알림을받을 수있는 방법이 있는지 (예 : 연결 상태가 변경된 브로드 캐스트 수신기와 같은 경우) 찾으려고합니다.안드로이드 - WiFi가 켜져 있고 인터넷이 손실되었을 때 방아쇠를 당길 때 도움이 필요합니다.

수신자 용 매니페스트 파일에서 CONNECTION_CHANGED를 사용 해봤습니다. WiFi가 연결되어 있어도 인터넷 연결이 끊어 졌는지 알 수 없습니다.

인터넷에 접속하기 위해 서비스 제공 업체 페이지에 로그인 할 수 있도록 백그라운드에서 실행해야합니다.

어떻게 도와 드릴까요? 도와주세요.

EDIT : Wi-Fi가 여전히 연결됨에도 불구하고 인터넷 연결이 끊어지면 수신자 (연결 변경에 대한 목록에 등록됨)가 호출되지 않습니다. 나는 활동을 시작하고 싶지 않다. 대신이 알림을받을 때 백그라운드에서 실행하고 싶습니다 (Asynchtask).

미리 감사드립니다.

+0

가 유 네트워크 상태를 트리거 할 않는 "인터넷을 사용할 수 있습니다"또는 원하는 WiFi 및 네트워크 변경 상태를 확인 하시겠습니까? – W4R10CK

+0

우리 ISP 페이지에서 로그인 작업을 완벽하게하기 위해 인터넷 연결이 끊어 질 때마다 트리거가 필요합니다. WiFi가 여전히 연결되어 있습니다. – user6825303

+0

방금 ​​방송 수신기로 질문에 답해 봤습니다. 그것은 나를 위해 아주 잘 작동합니다. – W4R10CK

답변

1
public static boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 

     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

와이파이/모바일 데이터가 연결되어있는 경우에

true을 반환하고 인터넷 연결이 활성화됩니다.

false wi-fi/mobile 데이터가 연결되어 있지만 인터넷에 연결되어 있지 않으면.

false wi-fi & 모바일 데이터가 전혀 연결되지 않은 경우.

인터넷 연결이 끊어졌을 때 알림을 받으려면 내가 쓴 위의 isNetworkAvailable() 메소드를 실행하는 서비스를 시작하는 것이 좋습니다. 매 초 (또는 5 초가 괜찮을 것입니다)를 실행할 수 있으며 false를 반환하면 사용자 정의 BroadcastReceiver를 호출하고 해당 BroadcastReceiver의 'onReceive'에서 알림을 작성할 수 있습니다. 'true'다음에 'false'의 첫 번째 알림에 대한 알림을 작성하십시오.

이것은 아마도 최선의 방법은 아니지만 가정용 앱의 속도를 늦추지는 않습니다. 5 초 또는 그 이상마다 전화하기를 선호하십시오.

+0

내가 필요한 것은 인터넷 연결이 없다는 알림입니다. UI가 실행되지 않아도 백그라운드에서 어떻게 가져 옵니까? – user6825303

+0

@ user6825303 내가 제안 할 수있는 한 가지 접근법은 위에서 응답 한 isNetworkAvailable() 메소드를 실행하는 서비스를 시작하는 것이다.매초마다 실행할 수 있으며, false를 반환하면 커스텀'BroadcastReceiver'와'BroadcastReceiver'의 'onReceive'를 호출하여'Notification'을 생성 할 수 있습니다. 'true (s)'다음에 'false'가 처음 표시 될 때 알림을 생성해야합니다. – Mann

+0

나는 그것을 시도하고 내가 뭔가를 얻을 경우 게시 할 것입니다. 고맙습니다. 더 좋은 방법이 있다면 (매초마다 계속 확인하지 않고) 알려 주시기 바랍니다. – user6825303

0

네트워크 상태에 대한 클래스 만들기 :

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 

public class NetworkUtil { 

public static int TYPE_WIFI = 1; 
public static int TYPE_MOBILE = 2; 
public static int TYPE_NOT_CONNECTED = 0; 


public static int getConnectivityStatus(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (null != activeNetwork) { 
     if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
      return TYPE_WIFI; 

     if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
      return TYPE_MOBILE; 
    } 
    return TYPE_NOT_CONNECTED; 
} 

public static String getConnectivityStatusString(Context context) { 
    int conn = NetworkUtil.getConnectivityStatus(context); 
    String status = null; 
    if (conn == NetworkUtil.TYPE_WIFI) { 
     status = "Wifi enabled"; 
    } else if (conn == NetworkUtil.TYPE_MOBILE) { 
     status = "Mobile data enabled"; 
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { 
     status = "Not connected to Internet"; 
    } 
    return status; 
} 
} 

방송을 수신 :

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class NetworkChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     String status = NetworkUtil.getConnectivityStatusString(context); 

     Toast.makeText(context, status, Toast.LENGTH_LONG).show(); 
    } 
} 

Menifest 파일 :

<application ...> 
... 
    <receiver 
     android:name="your_package_name.NetworkChangeReceiver" 
     android:label="NetworkChangeReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     </intent-filter> 
    </receiver> 
    ... 

+0

나는 같은 방법을 시도하고있다. 그것은 나를 돕지 못했다. 나는 당신의 코드로 시도 할 것이다. 내 activity/ui가 실행되지 않아도 트리거를 원합니다. 이런 이유로 매니페스트에 수신기를 등록하려고했습니다. – user6825303

+0

@ user6825303 방금 내 대답을 편집했습니다. – W4R10CK

+0

나를 도울 시간을 보내 주셔서 감사합니다. 내가 너를 혼란스럽게한다면 미안해. WiFi가 연결되어 있지만 인터넷 액세스가 몇 가지 이유로 인해 없습니다 (광대역 ISP 서버가 다운되거나 인터넷에 로그인해야합니다). 이 경우 백그라운드에서 로그인을 수행하도록 알림을 받아야합니다. 설명이 필요한 경우 알려주십시오. 또한, 내가 핑 (ping) 할 수있는 곳이 보이지 않습니다. – user6825303

관련 문제