ToggleButton控制WiFi开关
自定义toggleButton
为什么要自定义呢?原因就是系统原生的太丑了
- toggleButton xml文件
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:button="@drawable/togglebtn"
android:background="#00000000"
android:checked="true"
android:layout_centerInParent="true"
android:textOn=""
android:textOff=""
/>
- selector选择器的xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="true" android:drawable="@drawable/on"/>
<item android:state_checked="false" android:drawable="@drawable/off"/>
</selector>
可以看到我们通过在button属性上设置选择器selector设置选择的背景,并将background属性设置为透明,不使用控件原来的背景,并且将textOn和textOff设置为空不显示字体。
获取Wifi的系统服务
- 代码如下:
public class MainActivity extends Activity implements OnCheckedChangeListener{
private ToggleButton tb;
private WifiManager wm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tb=(ToggleButton) findViewById(R.id.toggleButton1);
tb.setOnCheckedChangeListener(this);
wm=(WifiManager) getSystemService(Context.WIFI_SERVICE);
if(wm.getWifiState()==wm.WIFI_STATE_ENABLED ||wm.getWifiState()==wm.WIFI_STATE_ENABLING){
tb.setChecked(true);
}else{
tb.setChecked(false);
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
wm.setWifiEnabled(true);
}else{
wm.setWifiEnabled(false);
}
}
}
- 通过getSystemService(Context.WIFI_SERVICE)获得WiFiManager对象。
- 通过wm.getWifiState()获得WiFi的状态,判断此时toggleButton的状态是否是checked。
- toggleButton的对象设置setOnCheckedChangeListener监听器。通过setEnable(boolean b),当b=true时打开WiFi,反之关闭。
- ==注意不要忘了权限==:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
效果图:
- 看status bar的WiFi状态
-