admin管理员组文章数量:1619277
近几日,看Settings代码中的wifi部分,一时兴起,想自己通过调用WifiManager以及WifiConfiguration的相关的配置实现连接wifi热点以及创建wifi热点。
软件平台:Android4.4
硬件调试平台:MTK
第一个小应用是创建activity,通过点击btn控件,从而连接wifi热点的代码:
package com.kaka.connector;
import java.util.List;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.wifi.WifiConfiguration;
import android.wifi.WifiManager;
import android.wifi.ScanResult;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.util.Log;
public class ConnectActivity extends Activity {
private List<ScanResult> wifiList;
private WifiManager wifiManager;
private List<String> passableHotsPot;
private WifiReceiver wifiReceiver;
private boolean isConnected=false;
private Button connect;
final private String TAG = "XINGSHI";
/* 监听热点变化 */
private final class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "onReceive..........\n");
wifiList = wifiManager.getScanResults();
if (wifiList == null || wifiList.size() == 0 || isConnected) return;
onReceiveNewNetworks(wifiList);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
wifiReceiver = new WifiReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(wifiReceiver, filter);
init();
}
/* 初始化参数 */
public void init() {
Log.e(TAG, "init..........\n");
setContentView(R.layout.activity_connect);
connect=(Button)findViewById(R.id.connect);
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
//通过按钮事件搜索热点
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
wifiManager.startScan();
}
});
}
/*当搜索到新的wifi热点时判断该热点是否符合规格*/
public void onReceiveNewNetworks(List<ScanResult> wifiList){
Log.e(TAG, "onReceiveNewNetwork..........\n");
passableHotsPot=new ArrayList<String>();
for(ScanResult result:wifiList){
Log.e(TAG, "" + result.SSID);
if((result.SSID).contains("vinci"))
passableHotsPot.add(result.SSID);
} synchronized (this) {
connectToHotpot();
}
}
/*连接到热点*/
public void connectToHotpot(){
Log.e(TAG, "connectToHotpot..........\n");
if(passableHotsPot==null || passableHotsPot.size()==0) return;
WifiConfiguration wifiConfig=this.setWifiParams(passableHotsPot.get(0));
int wcgID = wifiManager.addNetwork(wifiConfig);
boolean flag=wifiManager.enableNetwork(wcgID, true);
isConnected=flag;
Log.e(TAG, "connect success? "+flag);
}
/*设置要连接的热点的参数*/
public WifiConfiguration setWifiParams(String ssid){
WifiConfiguration apConfig=new WifiConfiguration();
apConfig.SSID="\""+ssid+"\"";
apConfig.preSharedKey="\"inspero2014\"";
apConfig.hiddenSSID = true;
apConfig.status = WifiConfiguration.Status.ENABLED;
apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
return apConfig;
}
@Override
protected void onDestroy() {
super.onDestroy();
/*销毁时注销广播*/
unregisterReceiver(wifiReceiver);
}
}
代码中指定了要连接的wifi热点名称的字段,setWifiParams配置了密码以及协议等信息。
第二个应用通过创建actiity,点击相关控件完成wifi AP的创建,其他设备可以连接之。
package com.kaka.hotspot;
import android.app.Activity;
import java.lang.reflect.Method;
import android.content.Context;
import android.wifi.WifiConfiguration;
import android.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class HotspotActivity extends Activity {
private WifiManager wifiManager;
private Button open;
private boolean flag=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connect);
//获取wifi管理服务
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
open=(Button)findViewById(R.id.open_hotspot); //通过按钮事件设置热点
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果是打开状态就关闭,如果是关闭就打开
flag=!flag;
setWifiApEnabled(flag);
} });
}
// wifi热点开关
public boolean setWifiApEnabled(boolean enabled) {
if (enabled) {
// disable WiFi in any case
//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
wifiManager.setWifiEnabled(false); }
try {
//热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
//配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = "NNNNBBBB";
apConfig.hiddenSSID = true;
apConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
apConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
apConfig.status = WifiConfiguration.Status.ENABLED;
//配置热点的密码
apConfig.preSharedKey="12122112";
//通过反射调用设置热点
Method method = wifiManager.getClass().getMethod( "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
//返回热点打开状态
return (Boolean) method.invoke(wifiManager, apConfig, enabled); } catch (Exception e) { return false; }
}
}
流程简洁,不多做说明,有需要的同学可以把要连接的热点名称,密码以及要创建的wifi热点名称及密码等做成可编辑的模式,更加灵活,上述的两个例子均按固定的名称密码处理的。
⚠上述应用需要添加的相关权限:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
欢迎交流学习~~~
版权声明:本文标题:android4.4自己动手连接wifi热点以及创建wifi热点 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728799260a1174329.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论