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 ...
随机推荐
- 在 Ubuntu16.04上安装anaconda+Spyder+TensorFlow(支持GPU)
TensorFlow 官方文档中文版 http://www.tensorfly.cn/tfdoc/get_started/introduction.html https://zhyack.github ...
- Codeforces Round #301 (Div. 2)A B C D 水 模拟 bfs 概率dp
A. Combination Lock time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- cmd编译java程序出现:找不到或无法加载主类的原因以及解决办法 以及 给java的main方法传递args参数
原因: 1.java源程序中没有主类main方法. 2.java源程序中包含有eclipse等IDE工具生成的package包. 解决办法(对应以上的原因): 1.运行含有main的类 2.将java ...
- Bootstrap笔记-加强版
1.bootstrap引入: <!DOCTYPE html><html lang="zh-cn"><head><meta charset= ...
- 状压dp Gym - 100676G
http://codeforces.com/gym/100676 题目大意: 给你n个科目,m个关系,例如A->B,表示要学习B科目,一定要把A科目学习掉.同理,如果还有C->B,那么,B ...
- 最小生成树的边的概念问题!!! 最小生成树的计数 bzoj 1016
1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5292 Solved: 2163[Submit][St ...
- 782C. Andryusha and Colored Balloons DFS
Link 题意: 给出一棵树,要求为其染色,并且使任意节点都不与距离2以下的节点颜色相同 思路: 直接DFS.由某节点出发的DFS序列,对于其个儿子的cnt数+1,那么因为DFS遍历的性质可保证兄弟结 ...
- LightOJ 1032 - Fast Bit Calculations 数位DP
http://www.lightoj.com/volume_showproblem.php?problem=1032 题意:问1~N二进制下连续两个1的个数 思路:数位DP,dp[i][j][k]代表 ...
- 重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
代码对一个 参数赋值.以一个临时变量取代该参数的位置. int Discount(int inputVal, int quantity, int yearTodate) { if (input ...
- 重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)
所谓的以查询取代临时变量:就是当你的程序以一个临时变量保存某一个表达式的运算效果.将这个表达式提炼到一个独立函数中.将这个临时变量的所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数调用. ...