【1307】TextView动态显示wifi状态的改变
这段时间做的项目中需要我动态的显示wifi的状态,并且在文本中显示出来。这个其实并不难,关键在于能够很好的理解service下的广播是怎么发送已经Activity和server的子类各自的关系。server子类的实例和activity之间通过广播(broadcast)来实现通讯。。
activity类:
WifiStatusActivity
package cn.edu.tit.re;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class WifiStatusActivity extends Activity implements OnClickListener {
WifiManager mWifiManager;
private Button open, close;
private TextView tv;
int wifiStatus;
private final static int UPDATE_TEXT =0;
public final static String UPDATE_ACTION = "cn.edu.tit.re.UPDATE_ACTION" ;
ActivityReceiver aReceiver ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifi_status);
mWifiManager = (WifiManager) getSystemService(Service.WIFI_SERVICE);
this.open = (Button) this.findViewById(R.id.open);
this.open.setOnClickListener(this);
this.close = (Button) this.findViewById(R.id.close);
this.close.setOnClickListener(this);
this.tv = (TextView) findViewById(R.id.showStatus);
aReceiver = new ActivityReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction(UPDATE_ACTION);
// filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
// filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
this.registerReceiver(aReceiver,filter);
Intent intent = new Intent(WifiStatusActivity.this,WifiStatusService.class);
startService(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.wifi_status, menu);
return true;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.open: // 打开wifi
mWifiManager.setWifiEnabled(true);
// close.setClickable(false);
break;
case R.id.close: // 关闭wifi
mWifiManager.setWifiEnabled(false);
default:
break;
}
}
public class ActivityReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//获取Intent中update消息.update表示wifi状态
int update = intent.getIntExtra("update", -1);
UserTool.printLog("收到的update:"+update);
if (update == MyApp.WIFI_CONNCTED) {
tv.setText("wifi保持连接中");
} else if (update == MyApp.WIFI_DISABLED) {
tv.setText("wifi已经关闭");
} else if (update == MyApp.WIFI_ENABLED) {
tv.setText("wifi可以用,没有连接");
}
}
}
}
server类:
WifiStatusService
package cn.edu.tit.re;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.IBinder;
public class WifiStatusService extends Service {
WifiStatusChangeReceiver wifiReceiver ;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
wifiReceiver=new WifiStatusChangeReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
this.registerReceiver(wifiReceiver,filter);
}
public class WifiStatusChangeReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// UserTool.printLog("wifi广播接收器:" + intent.getAction());
Intent updateIntent = new Intent(WifiStatusActivity.UPDATE_ACTION);
if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { // 判断wifi是否断开连接了,也就是wifi可用,但是没有连接
// UserTool.printLog("网络状态改变");
NetworkInfo info = intent
.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
// 断开连接
// Toast.makeText(context, "wifi可以用,没有连接", 500).show();
// UserTool.printLog("wifi可以用,没有连接");
updateIntent.putExtra("update", MyApp.WIFI_ENABLED);
sendBroadcast(updateIntent);
} else { // 保持连接
// Toast.makeText(context, "wifi保持连接中", 500).show();
// UserTool.printLog("wifi保持连接中");
updateIntent.putExtra("update", MyApp.WIFI_CONNCTED);
sendBroadcast(updateIntent);
}
} else if (intent.getAction().equals(
WifiManager.WIFI_STATE_CHANGED_ACTION)) {
// WIFI开关
int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_DISABLED);
if (wifistate == WifiManager.WIFI_STATE_DISABLED) // wifi不可使用
{// 如果关闭
// Toast.makeText(context, "wifi已经关闭", 500).show();
// UserTool.printLog("wifi已经关闭");
updateIntent.putExtra("update", MyApp.WIFI_DISABLED);
sendBroadcast(updateIntent);
}
}
}
}
}