2016-09-07 8 views
0

манифеста:android.net.wifi.STATE_CHANGE не вещает, когда Wi-Fi включен и получить WifiManager.EXTRA_WIFI_STATE не доступны

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

Права доступа:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

Приемник выполнен, когда WiFi является отключен, подключен или отключен (не проверял подключение/отключение/включение), но он не запускается, когда включен WiFi, кроме того, WifiManager.EXTRA_WIFI_STATE дополнительно недоступно в намерении, я использую usin г это:

public class WifiTrigger extends BroadcastReceiver { 
    ... 
    @Override 
public void onReceive(Context context, Intent intent) { 
    SharedPreferences preferences= PreferenceManager.getDefaultSharedPreferences(context); 

    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
    int previousWifiState = intent.getIntExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
    log("p"+previousWifiState); 
    log("c"+wifiState); 
    //log is a defined method used for logging (it just calls Log.d(...,...) 
    } 
    ... 
} 

и он держит вход p4c4 (4 для WifiManager.WIFI_STATE_UNKNOWN)


+0

'выполняется, когда Wi-Fi включен, подключен или отключен (не проверял подключение/отключение/включение), но он не запускается при включенном Wi-Fi'. Я предполагаю, что вы имели в виду« отключено »для одного из эти? В противном случае это противоречиво, и неясно, в чем проблема. – kcoppock

+0

да точно, я только что исправил его –

ответ

1

Вы зарегистрировавшись на неверном Intent действия. То, что вы действительно ищете это:

/** 
* Broadcast intent action indicating that Wi-Fi has been enabled, disabled, 
* enabling, disabling, or unknown. One extra provides this state as an int. 
* Another extra provides the previous state, if available. 
* 
* @see #EXTRA_WIFI_STATE 
* @see #EXTRA_PREVIOUS_WIFI_STATE 
*/ 
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 
public static final String WIFI_STATE_CHANGED_ACTION = 
    "android.net.wifi.WIFI_STATE_CHANGED"; 

Вы регистрируетесь на действие для сетевого изменения состояния, не переходником изменения состояния:

/** 
* Broadcast intent action indicating that the state of Wi-Fi connectivity 
* has changed. One extra provides the new state 
* in the form of a {@link android.net.NetworkInfo} object. If the new 
* state is CONNECTED, additional extras may provide the BSSID and WifiInfo of 
* the access point. 
* as a {@code String}. 
* @see #EXTRA_NETWORK_INFO 
* @see #EXTRA_BSSID 
* @see #EXTRA_WIFI_INFO 
*/ 
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 
public static final String NETWORK_STATE_CHANGED_ACTION = 
    "android.net.wifi.STATE_CHANGE"; 

Так просто изменив регистрацию вашего приемника с:

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

к

<receiver android:name=".triggers.WifiTrigger"> 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    </intent-filter> 
</receiver> 

исправит проблему.