我只想简单的认识一下WIFI基础,就看了会API然后,就瞎写,写出来后bug乱出,还有一些以前学过的基础竟然给忘了。
这个只是WIFI简单的开启关闭扫描,没有设计到核心的东西。留起来吧,以后用到就不用翻别人的资料了。
写完后就出现一个大问题,就是在你没有开启WIFI的条件下,这个是出不来的,我写的是在没有WIFI的环境下自动打开WIFI但是硬件的启动速度没法和软件的速度走的,所以在扫描的时候,如果WIFI还没有启动开,就造成扫不到设备。本来感觉是一个简单问题,但是思想太固执或者就不会,所以没有完成这个大问题,我尝试着有if while dowhile Activity生命周期还有线程还是不行。睡之前把这个部分问题得查查资料,看看怎么弄。
里面还有一个简单的设计,就是Back键的退出设置,大部分APP都是这样配置做的,今天一想,就查查实现了吧,很简单就是当back按下&& 第一次按下就展示这个对话框。
Note:
<manifest ...> <uses-feature android:name="android.hardware.wifi" /> ... </manifest>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
先贴出代码吧:
package com.example.hejingzhou.wifidemo;
import android.app.AlertDialog;
import android.bluetooth.le.ScanResult;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Message;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Handler;
public class MainActivity extends AppCompatActivity {
private String TAG = this.getClass().getSimpleName();
private WifiManager wifiManager;
private AlertDialog.Builder alertDialogBuilder;
private List<android.net.wifi.ScanResult> listView;
public static TextView textViewResult;
private ArrayList<String> arrayList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewResult = (TextView)findViewById(R.id.textView);
wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);//取得系统服务项
if(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED){
Scan();
}else {
Log.i(TAG, "WIFI未开启");
wifiManager.setWifiEnabled(true);//直接开启Wifi
while (wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED){
Log.i(TAG,"WIFI还没有打开");
if(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED){
Scan();
}
}
/**
* 如果取消注释将自动跳转到开启WIFI界面
*/
/*Toast.makeText(MainActivity.this,"您尚未开启WIFI,请开启WIFI",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivityForResult(intent, 0);*/
textViewResult.setText("因为刷新Activity不知道怎么弄了,用的线程老是报错,所以只能在不关闭WIFI的情况下才能Scan");
}
}
public void ShowDialog(){
alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setTitle("退出");
alertDialogBuilder.setMessage("退出时,需要关闭WIFI吗?");
alertDialogBuilder.setIcon(R.drawable.ww);
alertDialogBuilder.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
wifiManager.setWifiEnabled(false); //退出软件时关闭WIFI
onDestroy();
System.exit(0);
}
});
alertDialogBuilder.setNeutralButton("不退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialogBuilder.setNegativeButton("不关闭", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onDestroy();
System.exit(0);
}
});
alertDialogBuilder.show();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
ShowDialog();
}
return super.onKeyDown(keyCode, event);
}
public void Scan(){
Log.i(TAG, "WIFI已经开启");
wifiManager.startScan();
listView = wifiManager.getScanResults();
for(int i=0;i<listView.size();i++){
arrayList.add(listView.get(i).toString() + "\n\n");
textViewResult.setText(String.valueOf(arrayList));
}Log.i(TAG,""+arrayList);
}
}