用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输。快牙传输速度惊人应该跟它的这种机制有关系吧。不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧。下面我们就来探讨一下如何自动创建一个wifi热点吧

  创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热点的;其实创建热点很简单,先获取到wifi的服务,再配置热点名称、密码等等,然后再通过反射打开它就OK了。

  下面我们看看创建热点的代码实现:

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 wifiList;

private WifiManager wifiManager;

private List 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 wifiList){

passableHotsPot=new ArrayList();

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);

}

}

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Unity发布IPA并真机测试的设置与连接
  3. Android操作数据连接和Wifi
  4. Android(安卓)Studio初使用之百度地图初使用(一)--配置
  5. Android中的网络应用之网页设置,检测、配置用户设备属性。
  6. 【Android】蓝牙开发——经典蓝牙:配对与解除配对 & 实现配对或连
  7. Qt for Android——Ubuntu下Qt for Android的环境搭建
  8. [置顶] Android(安卓)轻松实现网络交互模板
  9. android创建快捷方式来打开应用中特定的Activity

随机推荐

  1. Android的Widget编写实例
  2. 构建Android自适应布局应用方案解析
  3. Android(安卓)6.0权限请求相关及权限分组
  4. 关于Android(安卓)Studio里的Gradle,你所
  5. Android(安卓)学习笔记 - 《第一行代码 A
  6. Android开发实战之——ProgressDialog的
  7. Android不明原因崩溃,不断重启解决办法记
  8. Android(安卓)新API 之 MediaCodec使用笔
  9. Android本地视频播放器开发--ffmpeg解码
  10. Android(安卓)短信链接跳浏览器打开APP