2016-10-12 7 views
1

휴대 전화와 Wi-Fi 연결이 끊어진 경우를 알고 싶습니다. 방송 수신기를 사용해야한다는 것을 알고 있습니다. 그래서 방송 수신기를 등록 :Wi-Fi에 연결/연결 해제되었을 때 감지합니다.

public class WifiScanReceiver extends BroadcastReceiver { 

    public WifiScanReceiver() { 

    } 

    public void onReceive(Context c, Intent intent) { 
     Log.i("TAG", "trigged"); 
    } 
} 

가 그럼이 Wi-Fi에 연결하여 I/끄기 라우터를 켤 때 - 아무 일도 발생하지 않습니다 :

intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
registerReceiver(wifiScanReceiver, intentFilter); 

는 다음 나는 방송 수신기를 만들었습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

나는 모든 권한이 :

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

인터넷 권한에 대한 매니페스트 파일도 수정했는지 확인하십시오. 아직 아닙니다. 또한 [이 게시물] (http://programmerguru.com/android-tutorial/android-check-wifi- 인터넷 연결 /) 도움이 될 수도 있습니다 – eRaisedToX

+0

@eRaisedToX 네, 그랬어 .. – MrStuff88

+0

당신은 인터넷을 감지 할 수 있습니까, 나는 와이파이 이외의 뜻인가요? – eRaisedToX

답변

1

아무 반응이 없습니다 :) 되돌릴 주시기보십시오. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

BroadcastReceiver을 선언하지 않은 한, 권한 만 추가하면 브로드 캐스트 수신기가 트리거되지 않습니다.

내 솔루션은 매니페스트를 통해 신고하는 것을 기반으로하지만 신고자가 코드에서 브로드 캐스터 클래스를 선언했음을 알 수 없으므로 매니페스트 또는 코드에서 선언하도록 선택할 수 있습니다.

그래서 신고하고 작동해야합니다. 나는 두 선언 코드를 테스트 한 작동합니다

<receiver android:name=".WifiScanReceiver"> 
    <intent-filter> 
     <action android:name="android.net.wifi.STATE_CHANGE"/> 
    </intent-filter> 
</receiver> 

을 또는에서 onCreate 방식으로 프로그래밍 new WifiScanReceiver()을 선언 :

: 당신의 WifiScanReceiver에

final IntentFilter filters = new IntentFilter(); 
filters.addAction("android.net.wifi.STATE_CHANGE"); 
super.registerReceiver(new WifiScanReceiver(), filters); 

당신은이 (reference)가 필요합니다

public void onReceive(Context context, Intent intent) { 

     ConnectivityManager cm = 
       (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI; 

     if (isWiFi) { 
      Log.i("TAG", "trigged"); 
     } 
    } 
+0

반환 횟수는 4 회이지만 한 번만 필요합니다. – MrStuff88

+0

여기에 해결책이 있습니다. 이유는 4 번 호출되었지만 두 번 호출되지 않았습니다. 여기에서 설명을 찾으십시오. http://stackoverflow.com/questions/5276032/connectivity-action-intent-received-twice-when-wifi-connected –

1

인터넷 및 네트워크 액세스를 위해 매니페스트에 권한을 부여함에 따라

ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = conMan.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) 
     // Connection Successful 
    else 
     // Connection Failed 
    } 
1

, 그 부분은 onReceive이 내부를 넣어 ConnectivityManager 클래스와 시도 괜찮아. 또한

,

당신은 당신의 장치에 인터넷/무선 랜 연결을 확인하기 위해 ConnectivityManager 클래스를 시도 할 수 있습니다.

public boolean checkMobileInternetConn() { 
     //Create object for ConnectivityManager class which returns network related info 
     ConnectivityManager connectivity = (ConnectivityManager) _context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     //If connectivity object is not null 
     if (connectivity != null) { 
      //Get network info - WIFI internet access 
      NetworkInfo info = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

      if (info != null) { 
       //Look for whether device is currently connected to WIFI network 
       if (info.isConnected()) { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 

(전체 코드에 대한 this post를 참조하십시오.)

이 n 개의

+0

라우터를 끄면 4 회 "false"가 반환됩니다. 기기가 다시 연결되면 아무도 없습니다. – MrStuff88

+0

WI-FI와의 연결이 끊어져 연결이 복원되면 true를 반환하면 false가 반환됩니다. – MrStuff88