我要得到的WiFi SSID,每当手机连接到新的WiFi网络。我注册了以下
接收器`registerReceiver(this.mybroadcast,新的IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));`
的code这部分完美的作品。但在的onReceive
方法
的NetworkInfo信息= intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO));
总是返回null。我试过 EXTRA_NETWORK_INFO
为好,但它也返回null。
我不能使用
this.registerReceiver(this.mybroadcast,新的IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));,
作为服务将停止/启动n分钟后使用,这将产生对服务的每次重新启动时。
任何想法,我怎么能解决这个问题呢?
解决方案的您可以在活动中创建广播的
第1步:
@覆盖
公共无效onResume(){
registerReceiver();
super.onResume();
}
私人无效registerReceiver(){
IntentFilter的过滤器=新的IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
registerReceiver(mReceiver,过滤器);
}
第2步
私人的BroadcastReceiver mReceiver =新的BroadcastReceiver(){
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
的NetworkInfo信息= intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
如果(资讯!= NULL){
如果(info.isConnected()){
WifiManager wifiManager =(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
串SSID = wifiInfo.getSSID();
如果(SSID!= NULL){
如果(isConnectClicked){
//你跟WIFI
}
}
}
}
} 其他 {
如果(intent.getAction()。等于(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)){
如果(intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)){
//连接失败
}
}
}
}
};
第3步
@覆盖
公共无效的onPause(){
unregisterReceiver(mReceiver);
super.onPause();
}
I have to get the WiFi ssid whenever phone connects to new WiFi network. I registered the following
receiver `registerReceiver(this.mybroadcast, new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));`
This part of code works perfectly. But in onReceive
method,
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO));
always returns null. I tried EXTRA_NETWORK_INFO
as well, but it also returns Null.
I can't use
this.registerReceiver(this.mybroadcast, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));,
as the service will stop/start after n minutes and using this will generate the event on every restart of service.
Any ideas that how can I solve this issue?
解决方案You can create broadcast within the activity
Step 1 :
@Override
public void onResume() {
registerReceiver();
super.onResume();
}
private void registerReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
}
Step 2
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info != null) {
if (info.isConnected()) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();
if (ssid != null) {
if (isConnectClicked) {
//YOUR CONNECTED WITH WIFI
}
}
}
}
} else {
if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
if (intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)) {
//Connection failed
}
}
}
}
};
Step 3
@Override
public void onPause() {
unregisterReceiver(mReceiver);
super.onPause();
}