转自:http://blog.csdn.net/luoboo525/article/details/7883998   亲测可用

用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是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之把手机的3g流量共享出来让其他人连接这个wifi的更多相关文章

  1. ADB连接手机的两种方式(usb数据线连接和wifi连接)

    ADB(Android Debug Bridge)安卓测试桥,它是连接电脑开发端和安卓设备的桥梁,这个安卓设备可以是真实的安卓手机或者平板,也可以是虚拟的安卓模拟器,   这里介绍ADB连接手机的两种 ...

  2. Android手机如何通过USB共享网络给Mac?

    最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...

  3. Android核心基础(手机卫士的一个知识点总结)

    注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了 ...

  4. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

  5. Web程序员开发App系列 - 调试Android和IOS手机代码(补图)

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  6. Android之监测手机网络状态的广播

    Android之监测手机网络状态的广播 Android 监控网络状态 Android利用广播监听设备网络连接(断网)的变化情况

  7. 精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具

    在制作界面原型的时候,如果有现成的界面基础元素可以使用的话,设计师就可以非常快速的完成原型的制作,能够节省大量的时间和精力.在这篇文章, 我向大家分享45套非常有用的 UI 和 Wireframe 套 ...

  8. Android应用程序组件Content Provider的共享数据更新通知机制分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...

  9. Android开发华为手机无法看log日志解决方法

    Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...

随机推荐

  1. Notepad++ 快捷键 大全

    Notepad++ 快捷键 大全Ctrl+C 复制Ctrl+X 剪切Ctrl+V 粘贴Ctrl+Z 撤消Ctrl+Y 恢复Ctrl+A 全选Ctrl+F 键查找对话框启动Ctrl+H 查找/替换对话框 ...

  2. canvas像素操作

    像素操作 相关方法:getImageData(x,y,w,h);  putImageData(oImg,x,y);  createImageData(w,h); 1.getImageData(x,y, ...

  3. What he did

    //记录组内成员具体完成工作情况,格式为:时间-事件-人物 2015-4-19 用户需求分析---主要由韩林编写,国旗,李春伟辅助编写,国旗发布文档至博客 2015-4-22 快速原型---由郭龙东完 ...

  4. fastjson生成和解析json数据,序列化和反序列化数据

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...

  5. 传值 属性 block 单例 协议

    界面传值 四种传值的方式 1.属性传值(从前往后) 步骤: 1.属性传值用于第一个界面向第二个界面传值 2.明确二者联系的桥梁,也就是触发跳转的地方 3.明确传输的值,类型是什么 4.在第二个视图控制 ...

  6. hdu 1231

    最大连续子序列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  7. JavaScript-join连接符

    1.转字符串:2种 1.将数组中每个元素都转为字符串,再用逗号分隔:var str=String(arr); 2.将数组中每个元素都字符串,再用自定义下标连接每个元素 var str=arr.join ...

  8. web可用性测试

    1.软件质量模型 2.什么是可用性测试 a. 用户体验   Google搜索界面  ipod  iphone b.使用感受   清爽 ,美观,简洁 3. 一位局长使用B/S系统 今天我点名买了个B/S ...

  9. Android Studio签名打包的两种方式

    签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如 ...

  10. MySQL调优参数

    key_buffer_size 含义:用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写). 影响:对于MyISAM表的影响不是很大,MyISAM会使用系统的缓存来存储数据,所以大量 ...