0
내가 와이파이 사용할 때 작업을 수행하려면이 와이파이 수신기를했던

...안드로이드 와이파이 수신기 늦게 응답

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     WifiManager wManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); 
     if (isWifiEnabled(wManager)) { 
      new MyTask().execute(); 
     } 
    } 

    public static boolean isWifiEnabled(WifiManager wifi) { 
     if (wifi==null) return false; 
     if (wifi.getWifiState()!= wifi.WIFI_STATE_ENABLED) return false; 
     return true; 
    } 
} 

방송 ... 이것은 수신기 내 매니페스트입니다 ..

<receiver android:enabled="true" android:name=".receiver.WifiReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 

...하지만 수신자가 wifi 전환에서 너무 늦게 (약 10-60 초 정도) 작업을 수행합니다.

어디에서 오류가 있습니까? 서비스를 사용하지 않고도이 작업을 수행 할 수있는 또 다른 방법이 있습니까?

+0

WIFI_STATE_CHANGED 대신 STATE_CHANGE을 (를) 사용해 볼 수 있습니까? 100 % 확신 할 수는 없지만 시간을 줄이는 것은 내 응용 프로그램에서 사용하기 때문에 시도해보십시오. – PsyGik

+0

또한 작업을 실행하는 데 시간이 걸리는 곳을 정확하게 게시 할 수 있습니까? – PsyGik

+0

늦게 내 생각에 시스템의 의도가 나타납니다. 이제 STATE_CHANGE에 도전 해 봅니다. –

답변

1

수신기가 WifiManager.WIFI_STATE_CHANGED_ACTION로 텐트 필터를 사용하여 등록하는 동안

wifiStateChangeFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
    registerReceiver(wifiStateChangeReceiver, wifiStateChangeFilter); 

처럼 한 OnCreate 또는 ONSTART 방법에 방송 수신기를 등록하지만 당신이 등록 취소됩니다 만들 필요가

BroadcastReceiver wifiStateChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     final String action = intent.getAction(); 

     if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 
      WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
      //your code  
     } 
    } 
}; 

oncreate() 메소드에 등록하는 경우 onDestroy() 메소드에서 등록 취소()가 필요합니다. OnStart()에 등록하면 OnStop() 메소드에서 등록 취소해야한다는 의미입니다.

관련 문제