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 ...
随机推荐
- 省选模拟赛 LYK loves string(string)
题目描述 LYK喜欢字符串,它认为一个长度为n的字符串一定会有n*(n+1)/2个子串,但是这些子串是不一定全部都不同的,也就是说,不相同的子串可能没有那么多个.LYK认为,两个字符串不同当且仅当它们 ...
- js 时间戳 转化
new Date((1524142795*1000)).toJSON().slice(11,16)
- tp查询中2个表格中字段,比较大小
$where['_string'] = '`has_number` < `number`';//~~~注意:这里`不能丢了: $coupon_flag = $coupon->where($ ...
- input file 图片上传展示重新上传
html <div> <label class="imgMark">说明:</label> <div class="erWeiM ...
- at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) :json转化“$ref 循环引用”的问题
原因: entity实体中存在@OneToMany,@ManyToOne注解,在转化json是产生了循环引用 报的错误 解决方法: springmvc @ResponseBody 默认的json转化用 ...
- 【BZOJ】1576 [Usaco2009 Jan]安全路经Travel
[算法]最短路树+(树链剖分+线段树)||最短路树+并查集 [题解] 两种方法的思想是一样的,首先题目限制了最短路树唯一. 那么建出最短路树后,就是询问对于每个点断掉父边后重新找路径的最小值,其它路径 ...
- 【CodeForces】947 D. Picking Strings
[题目]D. Picking Strings [题意]给定只含'A','B','C'的字符串,支持以下变换:1.A - BC 2.B - AC 3.C - AB 4.AAA - empty ...
- 2017ACM暑期多校联合训练 - Team 6 1010 HDU 6105 Gameia (博弈)
题目链接 Problem Description Alice and Bob are playing a game called 'Gameia ? Gameia !'. The game goes ...
- POJ 3734 Blocks (矩阵快速幂)
题目链接 Description Panda has received an assignment of painting a line of blocks. Since Panda is such ...
- Django之组合搜索组件(二)--另附simple_tag的创建使用方法
这次的代码为Django之组合搜索组件(一)的改版,实现的结果和(一)相同,不同的是,这次运用simple_tag方式,使.html程序简化 所以现在就开始编程吧! 首先想使用simple_tag方法 ...