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

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

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

  1. package com.tel.lajoin.wifi.hotspot;
  2. import java.lang.reflect.Method;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.net.wifi.WifiConfiguration;
  6. import android.net.wifi.WifiManager;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.widget.Button;
  10. public class HotspotActivity extends Activity {
  11. private WifiManager wifiManager;
  12. private Button open;
  13. private boolean flag=false;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. // TODO Auto-generated method stub
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. //获取wifi管理服务
  20. wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  21. open=(Button)findViewById(R.id.open_hotspot);
  22. //通过按钮事件设置热点
  23. open.setOnClickListener(new View.OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. //如果是打开状态就关闭,如果是关闭就打开
  27. flag=!flag;
  28. setWifiApEnabled(flag);
  29. }
  30. });
  31. }
  32. // wifi热点开关
  33. public boolean setWifiApEnabled(boolean enabled) {
  34. if (enabled) { // disable WiFi in any case
  35. //wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
  36. wifiManager.setWifiEnabled(false);
  37. }
  38. try {
  39. //热点的配置类
  40. WifiConfiguration apConfig = new WifiConfiguration();
  41. //配置热点的名称(可以在名字后面加点随机数什么的)
  42. apConfig.SSID = "YRCCONNECTION";
  43. //配置热点的密码
  44. apConfig.preSharedKey="12122112";
  45. //通过反射调用设置热点
  46. Method method = wifiManager.getClass().getMethod(
  47. "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
  48. //返回热点打开状态
  49. return (Boolean) method.invoke(wifiManager, apConfig, enabled);
  50. } catch (Exception e) {
  51. return false;
  52. }
  53. }
  54. }

布局就不写了吧,就一按钮,人人都知道的东西,写了也没啥意思。要实现文件传输,当然我们还需要写一个连接热点的客户端吧。连接热点的流程首先是搜索热点然后再判断热点是否符合规则然后再进行连接。

  1. package com.tel.lajoin.wifiscan;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.net.wifi.ScanResult;
  10. import android.net.wifi.WifiConfiguration;
  11. import android.net.wifi.WifiManager;
  12. import android.os.Bundle;
  13. public class MainActivity extends Activity {
  14. private List<ScanResult> wifiList;
  15. private WifiManager wifiManager;
  16. private List<String> passableHotsPot;
  17. private WifiReceiver wifiReceiver;
  18. private boolean isConnected=false;
  19. private Button connect;
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. init();
  24. }
  25. /* 初始化参数 */
  26. public void init() {
  27. setContentView(R.layout.main);
  28. connect=(Button)findViewById(R.id.connect);
  29. wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  30. wifiReceiver = new WifiReceiver();
  31. //通过按钮事件搜索热点
  32. connect.setOnClickListener(new View.OnClickListener() {
  33. @Override
  34. public void onClick(View v) {
  35. wifiManager.startScan();
  36. }
  37. });
  38. }
  39. /* 监听热点变化 */
  40. private final class WifiReceiver extends BroadcastReceiver {
  41. @Override
  42. public void onReceive(Context context, Intent intent) {
  43. wifiList = wifiManager.getScanResults();
  44. if (wifiList == null || wifiList.size() == 0 || isConnected)
  45. return;
  46. onReceiveNewNetworks(wifiList);
  47. }
  48. }
  49. /*当搜索到新的wifi热点时判断该热点是否符合规格*/
  50. public void onReceiveNewNetworks(List<ScanResult> wifiList){
  51. passableHotsPot=new ArrayList<String>();
  52. for(ScanResult result:wifiList){
  53. System.out.println(result.SSID);
  54. if((result.SSID).contains("YRCCONNECTION"))
  55. passableHotsPot.add(result.SSID);
  56. }
  57. synchronized (this) {
  58. connectToHotpot();
  59. }
  60. }
  61. /*连接到热点*/
  62. public void connectToHotpot(){
  63. if(passableHotsPot==null || passableHotsPot.size()==0)
  64. return;
  65. WifiConfiguration wifiConfig=this.setWifiParams(passableHotsPot.get(0));
  66. int wcgID = wifiManager.addNetwork(wifiConfig);
  67. boolean flag=wifiManager.enableNetwork(wcgID, true);
  68. isConnected=flag;
  69. System.out.println("connect success? "+flag);
  70. }
  71. /*设置要连接的热点的参数*/
  72. public WifiConfiguration setWifiParams(String ssid){
  73. WifiConfiguration apConfig=new WifiConfiguration();
  74. apConfig.SSID="\""+ssid+"\"";
  75. apConfig.preSharedKey="\"12122112\"";
  76. apConfig.hiddenSSID = true;
  77. apConfig.status = WifiConfiguration.Status.ENABLED;
  78. apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
  79. apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
  80. apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
  81. apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
  82. apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
  83. apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
  84. return apConfig;
  85. }
  86. @Override
  87. protected void onDestroy() {
  88. super.onDestroy();
  89. /*销毁时注销广播*/
  90. unregisterReceiver(wifiReceiver);
  91. }
  92. }

代码很简单,而且都有注释的,相信大伙儿能够看明白。  那就这样吧,至于文件传输建议还是去看看socket相关的文章吧。

android 代码设置、打开wifi热点及热点的连接(转)的更多相关文章

  1. 设置虚拟wifi,手机和电脑可以连接

    在家里没有wifi,笔记本电脑又是宽带连接,有时候手机流量用得很快,于是网上找了一下设置虚拟wifi 方法. 1.首先你的电脑上要有无线网卡,并且无线网上一定要是开户的,一般默认的都开启,如果没有开启 ...

  2. android 代码设置、打开wifi热点及热点的连接

    用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通 ...

  3. android代码设置、打开WLAN wifi热点及热点的连接

    其实创建热点很简单,先获取到wifi的服务,再配置热点名称.密码等等,然后再通过反射打开它就OK了. 下面我们看看创建热点的代码实现: 这一段是开启WLAN热点,并可以指定好它的热点名和密码 支行后, ...

  4. android代码设置EditText只输入数字、字母

     如何设置EditText,使得只能输入数字或者某些字母呢? 一.设置EditText,只输入数字: 方法1:直接生成DigitsKeyListener对象就可以了. et_1.setKeyLis ...

  5. Android 代码设置Activity 背景透明

    当指定Activity 样式 Them.Dialog 时候 又不同意用XML 设置 Activity 的背景颜色的时候 用代码 this.getWindow().getDecorView().setB ...

  6. android 代码设置progressBar 颜色

    void test() { LinearLayout linearLayout = new LinearLayout(this); ProgressBar progressBar = new Prog ...

  7. Android 代码设置RelativeLayout元素居中

    RelativeLayout relativeLayout= new RelativeLayout(this); RelativeLayout.LayoutParams rlp=new Relativ ...

  8. android 代码设置图标背景色(圆形图标)和图标颜色

    原图: 1.改变图标颜色: mImageView.setColorFilter(Color.parseColor("#ff0000")); 效果: 2.改变图标背景色(主要是圆形图 ...

  9. Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。

    开发过程中出现了通过自定义设置打开热点后手机搜索不到热点的问题. 后来通过观看  /data/misc/wifi  目录下的  hostapd.conf  文件,发现是 interface=ap0 d ...

随机推荐

  1. 【bzoj2588】Count on a tree

    Portal -->bzoj2588 Solution 不行我一定要来挂这道题qwq很气愤qwq(其实还不是因为自己蠢..) 额首先说一下正解 如果这个问题放在序列上面的话..直接离散化一下然后 ...

  2. MySQL自定义函数、触发器、存储过程

    存储过程 概念 存储过程,是一个数据库对象,类似一个函数. 在存储过程中可以使用SQL中的绝大部分内容,并且可以加入编程语言的特性(循环判断分支). 编写好存储过程之后,可以在客户端调用存储过程,存储 ...

  3. 《剑指offer》— JavaScript(7)斐波那契数列

    斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 实现代码 function Fibonacci(n) { var arr = ...

  4. dom4j之selectSingleNode方法

    dom4j之selectSingleNode方法 2017年12月18日 15:10:18 xclsky1120 阅读数:2043   版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  5. UESTC--1732

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1732 分析:dp,n个相同物品放入m个相同的盒子(允许为空)的个数为dp[n][m]=dp[n][m-1] ...

  6. CDOJ--1550&&1731

    原题链接:http://acm.uestc.edu.cn/problems.php?vol=15 分析:首先筛出sqrt(2^31-1)以内的素数,对于给定的区间[L,R],仍然用筛素数的思想把那些是 ...

  7. 手机 safari mac 调试

    1.下载 safari technology preview 2.iphone 设置: 打开“设置”程序,进入“Safari”->“高级”页面开启“Web检查器” 3.mac 上打开 safar ...

  8. 使用 css 的 keyframe 实现 loading 动画

    效果查看:https://jsfiddle.net/rubys/je16qL5k/6/ <!DOCTYPE html> <html lang="en"> & ...

  9. Uniform Distribution均匀分布

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  10. git安装和简单配置

    http://pan.baidu.com/share/link?shareid=4291215660&uk=219947478 直接贴网盘的地址了