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热点及热点的连接(转)的更多相关文章
- 设置虚拟wifi,手机和电脑可以连接
在家里没有wifi,笔记本电脑又是宽带连接,有时候手机流量用得很快,于是网上找了一下设置虚拟wifi 方法. 1.首先你的电脑上要有无线网卡,并且无线网上一定要是开户的,一般默认的都开启,如果没有开启 ...
- android 代码设置、打开wifi热点及热点的连接
用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通 ...
- android代码设置、打开WLAN wifi热点及热点的连接
其实创建热点很简单,先获取到wifi的服务,再配置热点名称.密码等等,然后再通过反射打开它就OK了. 下面我们看看创建热点的代码实现: 这一段是开启WLAN热点,并可以指定好它的热点名和密码 支行后, ...
- android代码设置EditText只输入数字、字母
如何设置EditText,使得只能输入数字或者某些字母呢? 一.设置EditText,只输入数字: 方法1:直接生成DigitsKeyListener对象就可以了. et_1.setKeyLis ...
- Android 代码设置Activity 背景透明
当指定Activity 样式 Them.Dialog 时候 又不同意用XML 设置 Activity 的背景颜色的时候 用代码 this.getWindow().getDecorView().setB ...
- android 代码设置progressBar 颜色
void test() { LinearLayout linearLayout = new LinearLayout(this); ProgressBar progressBar = new Prog ...
- Android 代码设置RelativeLayout元素居中
RelativeLayout relativeLayout= new RelativeLayout(this); RelativeLayout.LayoutParams rlp=new Relativ ...
- android 代码设置图标背景色(圆形图标)和图标颜色
原图: 1.改变图标颜色: mImageView.setColorFilter(Color.parseColor("#ff0000")); 效果: 2.改变图标背景色(主要是圆形图 ...
- Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。
开发过程中出现了通过自定义设置打开热点后手机搜索不到热点的问题. 后来通过观看 /data/misc/wifi 目录下的 hostapd.conf 文件,发现是 interface=ap0 d ...
随机推荐
- 【loj2461】【2018集训队互测Day 1】完美的队列
#2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...
- oracle中 trunc(),round(),ceil(),floor的使用
oracle中 trunc(),round(),ceil(),floor的使用 原文: http://www.2cto.com/database/201310/248336.html 1.round函 ...
- hiho 1044 : 状态压缩
#1044 : 状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车 ...
- go defer注意点,很容易出错的!!!
1:defer是在return之前执行的 函数返回的过程是这样的:先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数中 返回值 = xxx 调用defer函数 空的return fun ...
- SSH免密码登录,实现数据传输备份
简单来说,就是通过ssh-keygen -t rsa命令来产生一组公私钥,私钥是id_rsa,公钥是id_rsa.pub,把公钥上传到另一台服务器对应账号的.ssh/authorized_keys,即 ...
- Asp.Net MVC 自定义登录过滤器
1.新建类BaseController用于统一所有控制器继承扩展,方便扩展登录等过滤器.示例如下: using CloudWave.JustBeHere.JBH_H5.Controllers.Attr ...
- POJ 1113 Wall 凸包 裸
LINK 题意:给出一个简单几何,问与其边距离长为L的几何图形的周长. 思路:求一个几何图形的最小外接几何,就是求凸包,距离为L相当于再多增加上一个圆的周长(因为只有四个角).看了黑书使用graham ...
- CF821 C. Okabe and Boxes 栈模拟
Link 题意:给出操作,如果当前出栈操作使得出栈序列非顺序,可以在此之前自由排序栈中所有数,问最少排几次. 思路:已经出栈到第x个元素时,每次需要排序的操作后,能够保证前x元素出栈有序,否则说明该操 ...
- (32位)本体学习程序(ontoEnrich)系统配置说明文档
1.系统环境 32位 Ubuntu 源代码中已经包含在32位下编译生成的.o文件,配置好依赖库(步骤2)后,参考步骤3则可重新link. link无误即可运行程序. 2.依赖库 2.1 boost_ ...
- Map总结
Map是键值对集合,是一对一对往上存的,要保持键的唯一性 形式:Map<K, V> 方法: 增 put(K key, V value) 若存储时Map中有相同的键,则返回原来键的值,并覆盖 ...