0

Я сделал это Wi-Fi приемник, где я хочу выполнить действие, когда Wi-Fi включен ...Android Wi-Fi приемник вещания поздно ответ

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> 

... но приемник сделать задачу слишком поздно (около 10-60 секунд или больше) от переключения Wi-Fi.

Где моя ошибка? Есть ли другой способ сделать это без использования Сервиса?

+0

Вы можете попробовать STATE_CHANGE вместо WIFI_STATE_CHANGED? Я не на 100% уверен, что это сокращает время, но в моих приложениях я использую его, возможно, дайте ему попробовать. – PsyGik

+0

Кроме того, можете ли вы публиковать журналы, где именно требуется время для выполнения задачи? – PsyGik

+0

Получите системное намерение поздно, я думаю. Теперь я пытаюсь STATE_CHANGE –

ответ

1

при регистрации приемника использовать фильтр намерений в WifiManager.WIFI_STATE_CHANGED_ACTION

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 или OnStart методов, как этот

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

, но убедитесь, что вы регистрацией получатели после выполнения работы. Если вы регистрируетесь в методе oncreate(), вам нужно unRegister() в методе onDestroy(). Если вы регистрируетесь в OnStart(), вам нужно отменить регистрацию в методе OnStop().

Смежные вопросы