2011-12-15 6 views
1

이상한 문제가 있습니다. 나는 누군가가 WiFi 엑세스 포인트에 연결할 때마다 트리거하기위한 아주 간단한 코드를 가지고있다.Android 뒤로 또는 홈 버튼을 누르면 연결이 변경됩니까?

IntentFilter ConnectedFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
getApplicationContext().registerReceiver(ConnectedToAPReceiver, ConnectedFilter); 

    private BroadcastReceiver ConnectedToAPReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      final String action = intent.getAction(); 

      if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
      { 
       ConnectivityManager connManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); 
       NetworkInfo Wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
       if (Wifi.isConnected()) 
       { 
         // If we get here, it means that the user has just connected to wifi. 
       } 
      } 
     } 
}; 

이 코드는 내가 필요로하는 것을 위해 매우 잘 작동합니다. 그러나 나는 이상한 사건이 일어나고있다. 다시 또는 홈 버튼이 눌려지면 방송 수신기도 작동된다. 또한, 애플 리케이션을로드뿐만 아니라 이것을 트리거합니다.

왜이 버튼을 누르는 것이 Android에서 연결 변경을 일으키는 것으로 보입니까? 그리고 사람들은 이러한 버튼 누름과 유효한 연결 변경을 쉽게 구별하는 방법을 알고 있습니다.


일부 작업 덕분에 해결책의 일부입니다.

먼저 두 개의 클래스 인 activity 클래스와 service 클래스가 있습니다. 내 활동 클래스에서 onPause 및 onDestroy가 호출 될 때마다 브로드 캐스트 리시버를 사용하여 서비스 클래스에 변수를 설정합니다. (사용자가이 버튼을 누르면 트리거됩니다.) 서비스 클래스의 수신자는이 인 텐트를 선택하고 공용 변수를 설정합니다.

그런 다음 활동 클래스 onResume에서이 변수를 확인하고 서비스에 다른 인 텐트를 보내 변수를 기본 상태로 재설정합니다. 여기서 나는 또한 국기를 세웠다. 어떤 처리를하고있을 때 나는 미리 그 플래그를 체크하고 적절히 처리한다.

답변

1

나는 광산의 애플 리케이션에서도 그 행동을 확인할 수 있습니다. 나는 이것이 진짜로 이것을 일으키는 원인이되고있는 뒤로 또는 집을 누르는 행위라고 믿지 않는다. 오히려 뒷쪽 또는 집 (가정 경우 위젯)의 결과로 현재 재개되는 것이 무엇이든지 네트워크 연결을 사용하게된다. 연결을 사용하여 요청했거나 시작했으며 브로드 캐스트 수신기를 트리거하는 데 영향을 미칩니다.

이러한 오 탐지에 응답하고 싶지 않은 경우 BroadcastReceiver가받는 인 텐트를 조금 더 처리하고 수신자 내의 Wi-Fi 연결 상태를 추적하여 다른 사람이받을 때 어떤 조치를 취하지 않을 수 있습니다 CONNECTIVITY_ACTION에서 Wi-Fi가 이미 연결되어 있는지 확인합니다.

// true when there is no connectivity whatsoever 
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 

// lots of extra info & detailed state about the connection 
// see http://developer.android.com/reference/android/net/NetworkInfo.html 
NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 

NetworkInfo otherNetworkInfo = (NetworkInfo)intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 
+0

매우 정확한 코멘트 :

이 일부 주변의 문서는 당신이 당신이 뭔가를 할 필요가 있는지 여부를 결정하는 데 도움이 의도에 대해 검사 할 수있는 몇 가지 추가가 여기에 슈퍼 분명이 arent하지만. 나는 이것을 깨닫고 몇 가지 추가 검사를 추가했다. 누구든지이 문제에 관심이 있다면 어떻게 해결했는지에 대한 내 질문을 편집했습니다. – Dave