Android 连接Wifi和创建Wifi热点
16lz
2021-01-23
上代码:
MainActivity.java
[java] view plain copy- packagecom.widget.hotspot;
- importandroid.os.Bundle;
- importandroid.app.Activity;
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.IntentFilter;
- importandroid.util.Log;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.widget.Button;
- publicclassMainActivityextendsActivity{
- publicstaticfinalStringTAG="MainActivity";
- privateButtonmBtn1,mBtn2;
- privateWifiAdminmWifiAdmin;
- privateContextmContext=null;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- mContext=this;
- setContentView(R.layout.activity_main);
- mBtn1=(Button)findViewById(R.id.button1);
- mBtn2=(Button)findViewById(R.id.button2);
- mBtn1.setText("点击连接Wifi");
- mBtn2.setText("点击创建Wifi热点");
- mBtn1.setOnClickListener(newButton.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- mWifiAdmin=newWifiAdmin(mContext){
- @Override
- publicvoidmyUnregisterReceiver(BroadcastReceiverreceiver){
- //TODOAuto-generatedmethodstub
- MainActivity.this.unregisterReceiver(receiver);
- }
- @Override
- publicIntentmyRegisterReceiver(BroadcastReceiverreceiver,
- IntentFilterfilter){
- //TODOAuto-generatedmethodstub
- MainActivity.this.registerReceiver(receiver,filter);
- returnnull;
- }
- @Override
- publicvoidonNotifyWifiConnected(){
- //TODOAuto-generatedmethodstub
- Log.v(TAG,"haveconnectedsuccess!");
- Log.v(TAG,"###############################");
- }
- @Override
- publicvoidonNotifyWifiConnectFailed(){
- //TODOAuto-generatedmethodstub
- Log.v(TAG,"haveconnectedfailed!");
- Log.v(TAG,"###############################");
- }
- };
- mWifiAdmin.openWifi();
- mWifiAdmin.addNetwork(mWifiAdmin.createWifiInfo("YOU_WIFI","MM123456",WifiAdmin.TYPE_WPA));
- }
- });
- mBtn2.setOnClickListener(newButton.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- WifiApAdminwifiAp=newWifiApAdmin(mContext);
- wifiAp.startWifiAp("\"HotSpot\"","hhhhhh123");
- }
- });
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.activity_main,menu);
- returntrue;
- }
- @Override
- publicvoidonResume(){
- super.onResume();
- Log.d("Rssi","Registered");
- }
- @Override
- publicvoidonPause(){
- super.onPause();
- Log.d("Rssi","Unregistered");
- }
- }
WifiAdmin.java
参考了://http://blog.csdn.net/yuanbohx/article/details/8109042
[java] view plain copy- packagecom.widget.hotspot;
- importjava.util.List;
- importjava.util.Timer;
- importjava.util.TimerTask;
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.IntentFilter;
- importandroid.net.ConnectivityManager;
- importandroid.net.NetworkInfo;
- importandroid.net.NetworkInfo.DetailedState;
- importandroid.net.wifi.ScanResult;
- importandroid.net.wifi.WifiConfiguration;
- importandroid.net.wifi.WifiInfo;
- importandroid.net.wifi.WifiManager;
- importandroid.net.wifi.WifiManager.WifiLock;
- importandroid.util.Log;
- publicabstractclassWifiAdmin{
- privatestaticfinalStringTAG="WifiAdmin";
- privateWifiManagermWifiManager;
- privateWifiInfomWifiInfo;
- //扫描出的网络连接列表
- privateList<ScanResult>mWifiList;
- privateList<WifiConfiguration>mWifiConfiguration;
- privateWifiLockmWifiLock;
- privateStringmPasswd="";
- privateStringmSSID="";
- privateContextmContext=null;
- publicWifiAdmin(Contextcontext){
- mContext=context;
- //取得WifiManager对象
- mWifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
- //取得WifiInfo对象
- mWifiInfo=mWifiManager.getConnectionInfo();
- Log.v(TAG,"getIpAddress="+mWifiInfo.getIpAddress());
- }
- //打开WIFI
- publicvoidopenWifi(){
- if(!mWifiManager.isWifiEnabled()){
- mWifiManager.setWifiEnabled(true);
- }
- }
- //关闭WIFI
- publicvoidcloseWifi(){
- if(mWifiManager.isWifiEnabled()){
- mWifiManager.setWifiEnabled(false);
- }
- }
- publicabstractIntentmyRegisterReceiver(BroadcastReceiverreceiver,IntentFilterfilter);
- publicabstractvoidmyUnregisterReceiver(BroadcastReceiverreceiver);
- publicabstractvoidonNotifyWifiConnected();
- publicabstractvoidonNotifyWifiConnectFailed();
- //添加一个网络并连接
- publicvoidaddNetwork(WifiConfigurationwcg){
- register();
- WifiApAdmin.closeWifiAp(mContext);
- intwcgID=mWifiManager.addNetwork(wcg);
- booleanb=mWifiManager.enableNetwork(wcgID,true);
- }
- publicstaticfinalintTYPE_NO_PASSWD=0x11;
- publicstaticfinalintTYPE_WEP=0x12;
- publicstaticfinalintTYPE_WPA=0x13;
- publicvoidaddNetwork(Stringssid,Stringpasswd,inttype){
- if(ssid==null||passwd==null||ssid.equals("")){
- Log.e(TAG,"addNetwork()##nullpointererror!");
- return;
- }
- if(type!=TYPE_NO_PASSWD&&type!=TYPE_WEP&&type!=TYPE_WPA){
- Log.e(TAG,"addNetwork()##unknowntype="+type);
- }
- stopTimer();
- unRegister();
- addNetwork(createWifiInfo(ssid,passwd,type));
- }
- privateBroadcastReceivermBroadcastReceiver=newBroadcastReceiver(){
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- //TODOAuto-generatedmethodstub
- if(intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)){
- Log.d(TAG,"RSSIchanged");
- //有可能是正在获取,或者已经获取了
- Log.d(TAG,"intentis"+WifiManager.RSSI_CHANGED_ACTION);
- if(isWifiContected(mContext)==WIFI_CONNECTED){
- stopTimer();
- onNotifyWifiConnected();
- unRegister();
- }elseif(isWifiContected(mContext)==WIFI_CONNECT_FAILED){
- stopTimer();
- closeWifi();
- onNotifyWifiConnectFailed();
- unRegister();
- }elseif(isWifiContected(mContext)==WIFI_CONNECTING){
- }
- }
- }
- };
- privatefinalintSTATE_REGISTRING=0x01;
- privatefinalintSTATE_REGISTERED=0x02;
- privatefinalintSTATE_UNREGISTERING=0x03;
- privatefinalintSTATE_UNREGISTERED=0x04;
- privateintmHaveRegister=STATE_UNREGISTERED;
- privatesynchronizedvoidregister(){
- Log.v(TAG,"register()##mHaveRegister="+mHaveRegister);
- if(mHaveRegister==STATE_REGISTRING
- ||mHaveRegister==STATE_REGISTERED){
- return;
- }
- mHaveRegister=STATE_REGISTRING;
- myRegisterReceiver(mBroadcastReceiver,newIntentFilter(WifiManager.RSSI_CHANGED_ACTION));
- mHaveRegister=STATE_REGISTERED;
- startTimer();
- }
- privatesynchronizedvoidunRegister(){
- Log.v(TAG,"unRegister()##mHaveRegister="+mHaveRegister);
- if(mHaveRegister==STATE_UNREGISTERED
- ||mHaveRegister==STATE_UNREGISTERING){
- return;
- }
- mHaveRegister=STATE_UNREGISTERING;
- myUnregisterReceiver(mBroadcastReceiver);
- mHaveRegister=STATE_UNREGISTERED;
- }
- privateTimermTimer=null;
- privatevoidstartTimer(){
- if(mTimer!=null){
- stopTimer();
- }
- mTimer=newTimer(true);
- //mTimer.schedule(mTimerTask,0,20*1000);//20s
- mTimer.schedule(mTimerTask,30*1000);
- }
- privateTimerTaskmTimerTask=newTimerTask(){
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- Log.e(TAG,"timerout!");
- onNotifyWifiConnectFailed();
- unRegister();
- }
- };
- privatevoidstopTimer(){
- if(mTimer!=null){
- mTimer.cancel();
- mTimer=null;
- }
- }
- @Override
- protectedvoidfinalize(){
- try{
- super.finalize();
- unRegister();
- }catch(Throwablee){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicWifiConfigurationcreateWifiInfo(StringSSID,Stringpassword,inttype){
- Log.v(TAG,"SSID="+SSID+"##Password="+password+"##Type="+type);
- WifiConfigurationconfig=newWifiConfiguration();
- config.allowedAuthAlgorithms.clear();
- config.allowedGroupCiphers.clear();
- config.allowedKeyManagement.clear();
- config.allowedPairwiseCiphers.clear();
- config.allowedProtocols.clear();
- config.SSID="\""+SSID+"\"";
- WifiConfigurationtempConfig=this.IsExsits(SSID);
- if(tempConfig!=null){
- mWifiManager.removeNetwork(tempConfig.networkId);
- }
- //分为三种情况:1没有密码2用wep加密3用wpa加密
- if(type==TYPE_NO_PASSWD){//WIFICIPHER_NOPASS
- config.wepKeys[0]="";
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- config.wepTxKeyIndex=0;
- }elseif(type==TYPE_WEP){//WIFICIPHER_WEP
- config.hiddenSSID=true;
- config.wepKeys[0]="\""+password+"\"";
- config.allowedAuthAlgorithms
- .set(WifiConfiguration.AuthAlgorithm.SHARED);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
- config.allowedGroupCiphers
- .set(WifiConfiguration.GroupCipher.WEP104);
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- config.wepTxKeyIndex=0;
- }elseif(type==TYPE_WPA){//WIFICIPHER_WPA
- config.preSharedKey="\""+password+"\"";
- config.hiddenSSID=true;
- config.allowedAuthAlgorithms
- .set(WifiConfiguration.AuthAlgorithm.OPEN);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
- config.allowedPairwiseCiphers
- .set(WifiConfiguration.PairwiseCipher.TKIP);
- //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
- config.allowedPairwiseCiphers
- .set(WifiConfiguration.PairwiseCipher.CCMP);
- config.status=WifiConfiguration.Status.ENABLED;
- }
- returnconfig;
- }
- publicstaticfinalintWIFI_CONNECTED=0x01;
- publicstaticfinalintWIFI_CONNECT_FAILED=0x02;
- publicstaticfinalintWIFI_CONNECTING=0x03;
- /**
- *判断wifi是否连接成功,不是network
- *
- *@paramcontext
- *@return
- */
- publicintisWifiContected(Contextcontext){
- ConnectivityManagerconnectivityManager=(ConnectivityManager)context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfowifiNetworkInfo=connectivityManager
- .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- Log.v(TAG,"isConnectedOrConnecting="+wifiNetworkInfo.isConnectedOrConnecting());
- Log.d(TAG,"wifiNetworkInfo.getDetailedState()="+wifiNetworkInfo.getDetailedState());
- if(wifiNetworkInfo.getDetailedState()==DetailedState.OBTAINING_IPADDR
- ||wifiNetworkInfo.getDetailedState()==DetailedState.CONNECTING){
- returnWIFI_CONNECTING;
- }elseif(wifiNetworkInfo.getDetailedState()==DetailedState.CONNECTED){
- returnWIFI_CONNECTED;
- }else{
- Log.d(TAG,"getDetailedState()=="+wifiNetworkInfo.getDetailedState());
- returnWIFI_CONNECT_FAILED;
- }
- }
- privateWifiConfigurationIsExsits(StringSSID){
- List<WifiConfiguration>existingConfigs=mWifiManager.getConfiguredNetworks();
- for(WifiConfigurationexistingConfig:existingConfigs){
- if(existingConfig.SSID.equals("\""+SSID+"\"")/*&&existingConfig.preSharedKey.equals("\""+password+"\"")*/){
- returnexistingConfig;
- }
- }
- returnnull;
- }
- //断开指定ID的网络
- publicvoiddisconnectWifi(intnetId){
- mWifiManager.disableNetwork(netId);
- mWifiManager.disconnect();
- }
- //检查当前WIFI状态
- publicintcheckState(){
- returnmWifiManager.getWifiState();
- }
- //锁定WifiLock
- publicvoidacquireWifiLock(){
- mWifiLock.acquire();
- }
- //解锁WifiLock
- publicvoidreleaseWifiLock(){
- //判断时候锁定
- if(mWifiLock.isHeld()){
- mWifiLock.acquire();
- }
- }
- //创建一个WifiLock
- publicvoidcreatWifiLock(){
- mWifiLock=mWifiManager.createWifiLock("Test");
- }
- //得到配置好的网络
- publicList<WifiConfiguration>getConfiguration(){
- returnmWifiConfiguration;
- }
- //指定配置好的网络进行连接
- publicvoidconnectConfiguration(intindex){
- //索引大于配置好的网络索引返回
- if(index>mWifiConfiguration.size()){
- return;
- }
- //连接配置好的指定ID的网络
- mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
- true);
- }
- publicvoidstartScan(){
- mWifiManager.startScan();
- mWifiList=mWifiManager.getScanResults();
- mWifiConfiguration=mWifiManager.getConfiguredNetworks();
- }
- //得到网络列表
- publicList<ScanResult>getWifiList(){
- returnmWifiList;
- }
- //查看扫描结果
- publicStringBuilderlookUpScan(){
- StringBuilderstringBuilder=newStringBuilder();
- for(inti=0;i<mWifiList.size();i++){
- stringBuilder
- .append("Index_"+newInteger(i+1).toString()+":");
- //将ScanResult信息转换成一个字符串包
- //其中把包括:BSSID、SSID、capabilities、frequency、level
- stringBuilder.append((mWifiList.get(i)).toString());
- stringBuilder.append("/n");
- }
- returnstringBuilder;
- }
- //得到MAC地址
- publicStringgetMacAddress(){
- return(mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
- }
- //得到接入点的BSSID
- publicStringgetBSSID(){
- return(mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
- }
- //得到IP地址
- publicintgetIPAddress(){
- return(mWifiInfo==null)?0:mWifiInfo.getIpAddress();
- }
- //得到连接的ID
- publicintgetNetworkId(){
- return(mWifiInfo==null)?0:mWifiInfo.getNetworkId();
- }
- //得到WifiInfo的所有信息包
- publicStringgetWifiInfo(){
- return(mWifiInfo==null)?"NULL":mWifiInfo.toString();
- }
- }
WifiApAdmin.java
参考了 http://blog.csdn.net/cxlmax/article/details/7827102
[java] view plain copy- packagecom.widget.hotspot;
- importjava.lang.reflect.InvocationTargetException;
- importjava.lang.reflect.Method;
- importjava.util.Timer;
- importjava.util.TimerTask;
- importandroid.content.Context;
- importandroid.net.wifi.WifiConfiguration;
- importandroid.net.wifi.WifiManager;
- importandroid.util.Log;
- /**
- *创建热点
- *
- */
- publicclassWifiApAdmin{
- publicstaticfinalStringTAG="WifiApAdmin";
- publicstaticvoidcloseWifiAp(Contextcontext){
- WifiManagerwifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
- closeWifiAp(wifiManager);
- }
- privateWifiManagermWifiManager=null;
- privateContextmContext=null;
- publicWifiApAdmin(Contextcontext){
- mContext=context;
- mWifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
- closeWifiAp(mWifiManager);
- }
- privateStringmSSID="";
- privateStringmPasswd="";
- publicvoidstartWifiAp(Stringssid,Stringpasswd){
- mSSID=ssid;
- mPasswd=passwd;
- if(mWifiManager.isWifiEnabled()){
- mWifiManager.setWifiEnabled(false);
- }
- stratWifiAp();
- MyTimerChecktimerCheck=newMyTimerCheck(){
- @Override
- publicvoiddoTimerCheckWork(){
- //TODOAuto-generatedmethodstub
- if(isWifiApEnabled(mWifiManager)){
- Log.v(TAG,"Wifienabledsuccess!");
- this.exit();
- }else{
- Log.v(TAG,"Wifienabledfailed!");
- }
- }
- @Override
- publicvoiddoTimeOutWork(){
- //TODOAuto-generatedmethodstub
- this.exit();
- }
- };
- timerCheck.start(15,1000);
- }
- publicvoidstratWifiAp(){
- Methodmethod1=null;
- try{
- method1=mWifiManager.getClass().getMethod("setWifiApEnabled",
- WifiConfiguration.class,boolean.class);
- WifiConfigurationnetConfig=newWifiConfiguration();
- netConfig.SSID=mSSID;
- netConfig.preSharedKey=mPasswd;
- netConfig.allowedAuthAlgorithms
- .set(WifiConfiguration.AuthAlgorithm.OPEN);
- netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
- netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
- netConfig.allowedKeyManagement
- .set(WifiConfiguration.KeyMgmt.WPA_PSK);
- netConfig.allowedPairwiseCiphers
- .set(WifiConfiguration.PairwiseCipher.CCMP);
- netConfig.allowedPairwiseCiphers
- .set(WifiConfiguration.PairwiseCipher.TKIP);
- netConfig.allowedGroupCiphers
- .set(WifiConfiguration.GroupCipher.CCMP);
- netConfig.allowedGroupCiphers
- .set(WifiConfiguration.GroupCipher.TKIP);
- method1.invoke(mWifiManager,netConfig,true);
- }catch(IllegalArgumentExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IllegalAccessExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(InvocationTargetExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(SecurityExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(NoSuchMethodExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- privatestaticvoidcloseWifiAp(WifiManagerwifiManager){
- if(isWifiApEnabled(wifiManager)){
- try{
- Methodmethod=wifiManager.getClass().getMethod("getWifiApConfiguration");
- method.setAccessible(true);
- WifiConfigurationconfig=(WifiConfiguration)method.invoke(wifiManager);
- Methodmethod2=wifiManager.getClass().getMethod("setWifiApEnabled",WifiConfiguration.class,boolean.class);
- method2.invoke(wifiManager,config,false);
- }catch(NoSuchMethodExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IllegalArgumentExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IllegalAccessExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(InvocationTargetExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- }
- privatestaticbooleanisWifiApEnabled(WifiManagerwifiManager){
- try{
- Methodmethod=wifiManager.getClass().getMethod("isWifiApEnabled");
- method.setAccessible(true);
- return(Boolean)method.invoke(wifiManager);
- }catch(NoSuchMethodExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(Exceptione){
- e.printStackTrace();
- }
- returnfalse;
- }
- }
MyTimeCheck.java
[java] view plain copy- packagecom.widget.hotspot;
- publicabstractclassMyTimerCheck{
- privateintmCount=0;
- privateintmTimeOutCount=1;
- privateintmSleepTime=1000;//1s
- privatebooleanmExitFlag=false;
- privateThreadmThread=null;
- /**
- *DonotprocessUIworkinthis.
- */
- publicabstractvoiddoTimerCheckWork();
- publicabstractvoiddoTimeOutWork();
- publicMyTimerCheck(){
- mThread=newThread(newRunnable(){
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- while(!mExitFlag){
- mCount++;
- if(mCount<mTimeOutCount){
- doTimerCheckWork();
- try{
- mThread.sleep(mSleepTime);
- }catch(InterruptedExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- exit();
- }
- }else{
- doTimeOutWork();
- }
- }
- }
- });
- }
- /**
- *start
- *@paramtimesHowmanytimeswillcheck?
- *@paramsleepTimems,Everychecksleeptime.
- */
- publicvoidstart(inttimeOutCount,intsleepTime){
- mTimeOutCount=timeOutCount;
- mSleepTime=sleepTime;
- mThread.start();
- }
- publicvoidexit(){
- mExitFlag=true;
- }
- }