2016-09-07 7 views
0

マニフェストは:android.net.wifi.STATE_CHANGE無線LANが有効になって取得したときに、放送とWifiManager.EXTRA_WIFI_STATEない利用できない

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

権限:無線LANがあるとき

<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が有効になっている場合は起動されません。また、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(...,...) 
    } 
    ... 
} 

、それは(WifiManager.WIFI_STATE_UNKNOWN 4)p4c4をログに記録し続け


+0

'Wi-Fiが有効になっているとき、接続されているとき、または接続されていないときに実行されます(接続/無効/有効になっていないかどうかをチェックしませんでしたが、Wi-Fiが有効なときには起動されません)。これら?そうでなければ、それは矛盾しており、何が問題なのかは明らかではありません。 – kcoppock

+0

はい、ちょうど修正しました –

答えて

1

あなたは間違った意思アクションに登録しています。あなたが本当に探していることは次のとおりです。

/** 
* 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> 

にあなたの問題を解決します。

関連する問題