转载:https://blog.csdn.net/luoboo525/article/details/7883998
创建热点
- package com.tel.lajoin.wifi.hotspot;
- import java.lang.reflect.Method;
- import android.app.Activity;
- import android.content.Context;
- import android.net.wifi.WifiConfiguration;
- import android.net.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) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //获取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 = "YRCCONNECTION";
- //配置热点的密码
- 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;
- }
- }
- }
- package com.tel.lajoin.wifiscan;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.net.wifi.ScanResult;
- import android.net.wifi.WifiConfiguration;
- import android.net.wifi.WifiManager;
- import android.os.Bundle;
- public class MainActivity extends Activity {
- private List<ScanResult> wifiList;
- private WifiManager wifiManager;
- private List<String> passableHotsPot;
- private WifiReceiver wifiReceiver;
- private boolean isConnected=false;
- private Button connect;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- init();
- }
- /* 初始化参数 */
- public void init() {
- setContentView(R.layout.main);
- connect=(Button)findViewById(R.id.connect);
- wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
- wifiReceiver = new WifiReceiver();
- //通过按钮事件搜索热点
- connect.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- wifiManager.startScan();
- }
- });
- }
- /* 监听热点变化 */
- private final class WifiReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- wifiList = wifiManager.getScanResults();
- if (wifiList == null || wifiList.size() == 0 || isConnected)
- return;
- onReceiveNewNetworks(wifiList);
- }
- }
- /*当搜索到新的wifi热点时判断该热点是否符合规格*/
- public void onReceiveNewNetworks(List<ScanResult> wifiList){
- passableHotsPot=new ArrayList<String>();
- for(ScanResult result:wifiList){
- System.out.println(result.SSID);
- if((result.SSID).contains("YRCCONNECTION"))
- passableHotsPot.add(result.SSID);
- }
- synchronized (this) {
- connectToHotpot();
- }
- }
- /*连接到热点*/
- public void connectToHotpot(){
- 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;
- System.out.println("connect success? "+flag);
- }
- /*设置要连接的热点的参数*/
- public WifiConfiguration setWifiParams(String ssid){
- WifiConfiguration apConfig=new WifiConfiguration();
- apConfig.SSID="\""+ssid+"\"";
- apConfig.preSharedKey="\"12122112\"";
- 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);
- }
- }
代码很简单,而且都有注释的,相信大伙儿能够看明白。 那就这样吧,至于文件传输建议还是去看看socket相关的文章吧。
/**
* 关闭WiFi热点
*/
public void closeWifiHotspot() {
try { Method method = wifiManager.getClass().getMethod("getWifiApConfiguration"); method.setAccessible(true); WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager); Method method2 = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method2.invoke(wifiManager, config, false); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
/*获取热点的状态*/
public
static
boolean
isWifiApOpen(Context context) {
try
{
WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
//通过放射获取 getWifiApState()方法
Method method = manager.getClass().getDeclaredMethod(
"getWifiApState"
);
//调用getWifiApState() ,获取返回值
int
state = (
int
) method.invoke(manager);
//通过放射获取 WIFI_AP的开启状态属性
Field field = manager.getClass().getDeclaredField(
"WIFI_AP_STATE_ENABLED"
);
//获取属性值
int
value = (
int
) field.get(manager);
//判断是否开启
if
(state == value) {
return
true
;
}
else
{
return
false
;
}
}
catch
(NoSuchMethodException e) {
e.printStackTrace();
}
catch
(IllegalAccessException e) {
e.printStackTrace();
}
catch
(InvocationTargetException e) {
e.printStackTrace();
}
catch
(NoSuchFieldException e) {
e.printStackTrace();
}
return
false
;
}
状态监听
mIntentFilter = new IntentFilter("android.net.wifi.WIFI_AP_STATE_CHANGED");
registerReceiver(mReceiver, mIntentFilter);
- private BroadcastReceiver wifiReceiver = new BroadcastReceiver(){
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if ("android.net.wifi.WIFI_AP_STATE_CHANGED".equals(action)) {
- //便携式热点的状态为:10---正在关闭;11---已关闭;12---正在开启;13---已开启
- int state = intent.getIntExtra("wifi_state", 0);
- Log.i(TAG, "state= "+state);
- wiFiAPObserver.stateChanged(state);
- }
- }
- };