J'ai essayé d'enregistrer un Wifi BroadcastReceiver pour obtenir l'état Wi-Fi quand il change. Mais jusqu'à présent, je n'ai aucune chance de recevoir l'émission.
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name" >
<receiver Android:name=".WifiReceiver" >
<intent-filter>
<action Android:name="Android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" />
<action Android:name="Android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
//activity declaration here...
</application>
Savez-vous comment enregistrer BraodcastReceiver dans le manifeste?
Je ne veux pas l'enregistrer dans les activités parce que je veux surveiller le wifi lorsque l'état du wifi change, indique si mon application est en cours d'exécution ou non.
Ceci est ma classe BroadcastReceiver:
public class WifiReceiver extends BroadcastReceiver {
private final String TAG = "WifiReceiver";
@Override
public void onReceive(Context context, Intent intent) {
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
String wifiStateText = "No State";
switch (wifiState) {
case WifiManager.WIFI_STATE_DISABLING:
wifiStateText = "WIFI_STATE_DISABLING";
break;
case WifiManager.WIFI_STATE_DISABLED:
wifiStateText = "WIFI_STATE_DISABLED";
break;
case WifiManager.WIFI_STATE_ENABLING:
wifiStateText = "WIFI_STATE_ENABLING";
break;
case WifiManager.WIFI_STATE_ENABLED:
wifiStateText = "WIFI_STATE_ENABLED";
break;
case WifiManager.WIFI_STATE_UNKNOWN:
wifiStateText = "WIFI_STATE_UNKNOWN";
break;
default:
break;
}
MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText);
MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date());
}
}
J'espère vraiment avoir de l'aide. Merci d'avance.
Votre destinataire dans le manifeste devrait ressembler à ceci
<receiver Android:name=".WifiReceiver" >
<intent-filter>
<action Android:name="Android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
De plus, l'autorisation suivante peut être nécessaire
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<receiver Android:name=".WifiReceiver" >
<intent-filter Android:priority="100" >
<action
Android:name="Android.net.wifi.WIFI_STATE_CHANGED"
Android:enabled="true" />
</intent-filter>
</receiver>
Entrez l'indicateur de priorité élevée et activé en tant que true
Ce n’est pas parce que la diffusion a été envoyée avec le drapeau Intent.FLAG_RECEIVER_REGTED_ONLY_BEFORE_BOOT que votre application doit enregistrer ce récepteur avant le démarrage d’Android, qui ne peut être que les services système.
Le meilleur qui a fonctionné pour moi:
Manifeste:
<receiver Android:name="com.AEDesign.communication.WifiReceiver">
<intent-filter Android:priority="100">
<action Android:name="Android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
WifiReceiver Classe:
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info != null) {
if(info.isConnected()) {
//Do your work.
//To check the Network Name or other info:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();
}
}
}
}
Autorisations:
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
Je pense que vous avez enregistré le récepteur de la manière suivante:
<receiver
Android:name=".WiFiReciever">
<intent-filter>
<action
Android:name="class name with package" />
<data
Android:scheme="myscheme" />
</intent-filter>
</receiver>