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<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相关的文章吧。

总结

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

(0)

相关推荐

  • Android获取当前手机网络类型(2g、3g、4g、wifi)以及手机型号、版本号代码

    获取手机型号: android.os.Build.MODEL 获取手机的SDK版本号:android.os.Build.VERSION.SDK 获取手机当前网络类型代码如下:这是一个工具类,大家可以保存下来以后方便使用. package com.iqtogether.qxueyou.support.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.Net

  • Android 连接Wifi和创建Wifi热点的实例

    本文实例讲述了连接Wifi和创建Wifi热点的方法.分享给大家供大家参考,具体如下: android的热点功能不可见,用了反射的技术搞定之外. Eclipse设置语言为utf-8才能查看中文注释 上代码: MainActivity.java package com.widget.hotspot; import android.os.Bundle; import android.app.Activity; import android.content.BroadcastReceiver; impo

  • 设置Android设备WIFI在休眠时永不断开的代码实现

    MainActivity如下: package cc.ab; import android.os.Bundle; import android.provider.Settings; import android.app.Activity; /** * Demo描述: * 设置设备在睡眠期间始终保持WLAN开启. * * 参考资料: * 1 http://stackoverflow.com/questions/8652031/how-to-modify-wi-fi-sleep-policy-pro

  • Android连接指定Wifi的方法实例代码

    本篇文章主要记录一下Android中打开Wifi.获取Wifi接入点信息及连接指接入点的方法. 自己写的demo主要用于测试接口的基本功能,因此界面及底层逻辑比较粗糙. demo的整体界面如下所示: 上图中的OPEN按键负责开启Wifi: GET按键负责获取扫描到的接入点信息. 当获取到接入点信息后,我选取了其中的名称及信号强度,以列表的形式显示在主界面下方,如下图: 当点击列表中的Item时,就会去连接对应的接入点. 自己的逻辑比较简单,测试时的代码,假定连接的是不许要密码或密码已知的接入点.

  • Android获取周围WIFI热点服务

    在实际开发中我们会经常需要获取周围WiFi热点,最近做了这个demo,写出来和大家一起分享一下吧.大体思路呢是这样的,首先WifiManger获取WiFi服务,然后将结果储存在ArrayList<ScanResult>中,好了,具体内容大家可以直接看代码: MainActivity.java:  public class MainActivity extends AppCompatActivity { ArrayList<ScanResult> list; //存放周围wifi热点

  • android编程实现设置、打开wifi热点共享供他人连接的方法

    本文实例讲述了android编程实现设置.打开wifi热点共享供他人连接的方法.分享给大家供大家参考,具体如下: 用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧.下面我们就来探讨一下如何自动创建一个wifi热点吧 创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热

  • Android中判断有无可用网络的代码(是否是3G或者WIFI网络)

    复制代码 代码如下: ConnectivityManager mConnectivity = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager mTelephony = (TelephonyManager)this.getSystemService(TELEPHONY_SERVICE); //检查网络连接,如果无网络可用,就不需要进行连网操作等 NetworkInfo inf

  • Android判断是Wifi还是4G网络代码

    本文实例为大家分享了Android判断是Wifi还是4G网络的具体代码,供大家参考,具体内容如下 package com.chengxinet.bobo.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; /** * Created by Ad

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

    用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧.下面我们就来探讨一下如何自动创建一个wifi热点吧大笑 创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热点的:其实创建热点很简单,先获取到wifi的服务,再配置热点名称.密码等等,然后再通过反射打开它就OK了. 下

  • Android 代码设置开机自启动App的方法

    有的时候想要用户一旦打开手机.我们的APP就自动运行了. 代码如下: 创建一个监听. /** * create by:sunlei on 2017/7/7 15:48 * e-mail:872822645@qq.com * introduce: */ public class ContentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { I

  • Android手势密码--设置和校验功能的实现代码

    效果图如下,大家感觉不错请参考实现代码 具体代码如下所示: private void setGesturePassword() { toggleMore.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecke

  • Android打包版本号设置方法

    之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本. 晚上学习了如何配置打包名称,很简单,修改build.gradle里的代码就行.  详细记录如下: 1.打开app这个directory下的build.gradle 2.定义打包时间: //时间 def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZon

  • Android CheckBox中设置padding无效解决办法

    Android CheckBox中设置padding无效解决办法 CheckBox使用本地图片资源 CheckBox是Android中用的比较多的一个控件,不过它自带的button样式比较丑,通常都会替换成本地的资源图片.使用本地资源图片很简单,设置android:button属性为一个自定义的包含selector的drawable文件即可. 例如android:button="@drawable/radio_style".radio_style.xml定义如下.checked和unc

  • Android基于高德地图poi的仿微信获取位置功能实例代码

    1.打开页面自动定位,同时搜索周边所有poi 2.点击搜索按钮,输入关键子,获取关键字搜索结果 3.选取listview中的一项即可定位到该位置,或者获取任何消息 4.文件类 1.MapActivity public class MapActivity extends Activity implements PoiSearch.OnPoiSearchListener { private MapView mMapView = null; private AMap aMap; private MyL

  • Android的权限设置及自启动设置方法

    在开发项目中,遇到了两大麻烦: 1.涉及到的系统的权限较多(拍照.录音.定位.拨号等). 对于这点,有很多人会拒绝这些权限,那就尴尬了,他们又不懂只会跟我们反应这什么破app,这个不好用,那个不好使,更可恶的是不同手机的系统设置都长不一样,根本就不好跟他们讲在那里进行设置.于是想到解决的办法就是:在app中添加一个设置权限按钮让app直接跳到它的权限设置界面,这就方便多了.代码段如下: /** * 跳转到权限设置界面 */ private void getAppDetailSettingInte

  • Android中实现长按照片弹出右键菜单功能的实例代码

    场景效果 注: 实现 将布局改为LinearLayout,并通过android:orientation="vertical">设置为垂直布局. 然后添加一个ImageView,并设置id属性和图片源. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr

  • android开发教程之用命令启动android模拟器并设置其内存大小

    用命令启动android模拟器并设置其内存大小的代码 在终端里输入 复制代码 代码如下: emulator -avd Android2.3 -partition-size 512

随机推荐