热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android通过代码设置、打开wifi热点及热点连接的实现代码

这篇文章主要介绍了Android通过代码设置、打开wifi热点及热点连接的实现代码,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是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); 
  } 
}

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

总结

以上所述是小编给大家介绍的Android 通过代码设置、打开wifi热点及热点的连接的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
author-avatar
lixinleslee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有