2012-06-18 2 views
0

재부팅 및 비행 모드로 들어가는 수신기를 포함하여 이미 몇 대의 수신기가 실행 중입니다. 그러나 나는 내가해야 할 일을 제 시간에 맞춰 의도를 얻지 못하고 있으며, 외부 서버에 빠른 메시지를 보냅니다.네트워크가 다운되기 전에 방송을 수신하는 방법

의도 필터를 우선 순위 1000으로 설정해도 너무 늦기 전에 전송한다는 보장은 없지만 도움이됩니다.

명시된 바와 같이, 네트워크가 이미 다운 된 후에도 방송을 수신하지 못했을뿐입니다. 너무 늦었습니다.

내가 몇 가지 힌트를 찾을 수있는 곳으로의 어떤 안내문이 가장 환영 받는데, 나는 지난 몇 일 동안 운 좋게도 그물을 긁어 모으고있다.

편집 : 나는 내 의도가 완전히 명확하게하지 않은 것을 깨달았다 : 나는 현재 다음 작업을 사용하고 4 방송 청취자

  <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 

      <action android:name="android.intent.action.BOOT_COMPLETED" /> 

      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
      <action android:name="android.intent.action.PROVIDER_CHANGED" /> 

      <action android:name="android.intent.action.ACTION_SHUTDOWN" /> 
      <action android:name="android.intent.action.AIRPLANE_MODE" /> 

편집 2 사이에 분할. 네트워크 상태 자체에 대해서가 아니라 비행 모드로 들어가거나 장비를 끄기위한 사용자 행동에 대해 이야기하고 있습니다.

+0

다른 어떤 방송을 사용하고 있습니까? 사용중인 모든 것을 나열하십시오. – Orlymee

+1

정의상 불가능합니다. * 시스템 *은 네트워크가 다운되기 전에 다운된다는 것을 모를 수도 있습니다. – CommonsWare

+0

네트워크 자체가 다운되는 것을 예측하는 것은 불가능하다는 것을 알고 있습니다. 비행 모드로 들어가거나 기기를 끄기위한 사용자 행동을 말합니다. –

답변

0

이 코드를 참조하십시오

IntentFilter monitorInternetConnectivityFilter = new IntentFilter(
      ConnectivityManager.CONNECTIVITY_ACTION); 
MonitorInternetConnectivity monitorInternetConnectivityReciever; 
monitorInternetConnectivityReciever = new MonitorInternetConnectivity(); 
class MonitorInternetConnectivity extends BroadcastReceiver { 

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

      if (!NetworkHelper.isOnline(context)) { 
       //Toast.maketext("Network went down"); 
      } 

     } 

    } 

@Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 

     unregisterReceiver(monitorInternetConnectivityReciever); 

    } 
@Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onPause(); 

     registerReceiver(monitorInternetConnectivityReciever, 
       monitorInternetConnectivityFilter); 

    } 

////////////////////// NetworkHelper

public static boolean isOnline(Context cxt) { 
     ConnectivityManager cm = (ConnectivityManager) cxt 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting() && canHit()) { 

      Logger.debug(NetworkHelper.class, "mode is online"); 
      return true; 
     } 
     return false; 
} 

public static boolean canHit() { 

     try { 
      URL url = new URL("http://www.google.com/"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url 
        .openConnection(); 
      urlConnection.setConnectTimeout(3000); 
      urlConnection.connect(); 
      urlConnection.disconnect(); 
      return true; 
     } catch (Exception e) { 
      Logger.error(NetworkHelper.class, e.getMessage()); 
      return false; 
     } 

    } 

이 코드, 네트워크가 다운 된 경우 사용자에게 알리며, 사용자에게 바로 전에 알려주는지 확실하지 않음

+0

재현 결과가 유용 할지라도, 그 모습에서 사실을 알린 후에 알려줄 것입니다. 나는 그것을 쏜다. 감사. –

+0

나는 조금 다르게 접근했지만 본질적으로 동일한 수신기를 사용했다. 시간이 지나면 네트워크가 업데이트되지 않습니다. 단지 사실 이후에, 내가 생각한대로. 그 모습에서 나는 내가 원하는 것을 할 수 없다. 시스템이 사용자 작업을 통해 오프라인 상태가된다는 알림을 받겠습니다.하지만 전송할 수 있도록 제 시간에 도착하면 완전히 무작위입니다. 그래도 포인터를 가져 주셔서 감사합니다. –

관련 문제