Android之把手机的3g流量共享出来让其他人连接这个wifi
转自:http://blog.csdn.net/luoboo525/article/details/7883998 亲测可用
用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是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之把手机的3g流量共享出来让其他人连接这个wifi的更多相关文章
- ADB连接手机的两种方式(usb数据线连接和wifi连接)
ADB(Android Debug Bridge)安卓测试桥,它是连接电脑开发端和安卓设备的桥梁,这个安卓设备可以是真实的安卓手机或者平板,也可以是虚拟的安卓模拟器, 这里介绍ADB连接手机的两种 ...
- Android手机如何通过USB共享网络给Mac?
最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...
- Android核心基础(手机卫士的一个知识点总结)
注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了 ...
- Android项目实战--手机卫士开发系列教程
<ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件 保存到相册 2 分钟前 上传 Android项目实战--手机卫士01- ...
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Android之监测手机网络状态的广播
Android之监测手机网络状态的广播 Android 监控网络状态 Android利用广播监听设备网络连接(断网)的变化情况
- 精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具
在制作界面原型的时候,如果有现成的界面基础元素可以使用的话,设计师就可以非常快速的完成原型的制作,能够节省大量的时间和精力.在这篇文章, 我向大家分享45套非常有用的 UI 和 Wireframe 套 ...
- Android应用程序组件Content Provider的共享数据更新通知机制分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...
- Android开发华为手机无法看log日志解决方法
Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...
随机推荐
- mysql学习(2)-MySQL服务器优化
调优思路: 1.数据库设计与规划--以后再修该很麻烦,估计数据量,使用什么存储引擎 2.数据的应用--怎样取数据,sql语句的优化 3.mysql服务优化--内存的使用,磁盘的使用 4.操作系统的优化 ...
- Docker生产环境实践指南
技术栈:1. 构建系统2. 镜像仓库3. 宿主机管理4. 配置管理5. 部署6. 编排7. 日志8. 监控 镜像:1. 如果用户像往常一样运行包安装命令,这些永远也用不上的缓存包文件将会永远地成为镜像 ...
- AT91-PWM应用
步骤1: make menuconfig配置内核, 开启PWM输出功能. Device Drivers ---> Misc devices ---> <*>Atmel AT3 ...
- memcached 基本操作
保存数据 向memcached保存数据的方法有 add replace set 它们的使用方法都相同: my $add = $memcached->add( '键', '值', '期限' );m ...
- WebService 调用
一.WebService调用 1.webservice支持四种调用方式:SOAP 1.1,SOAP 1.2,GET,POST. 2.如果要webservice支持GET,POST调 ...
- 传统MySQL+ Memcached架构遇到的问题
实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: ...
- NSString 的 compare 方法
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange ...
- 信心题--FUOJ2226(莫队算法)
http://acm.fzu.edu.cn/problem.php?pid=2226 信心题,还说是信心题,题目给的真好.但是一点都不像信心题. 又是一个新的算法,莫队算法 莫队算法是一个用数组就可以 ...
- win10使用Composer-Setup安装Composer以及使用Composer安装Yii2最新版
1:下载 ca-bundle.crt和cacert.pem 将这两个文件放在php目录下 2:php.ini中添加上述两个文件的路径 curl.cainfo=C:/xampp/php/ca-bundl ...
- 使用adb 查询data/data下的数据库
1.用cmd打开adb 2.输入adb shell 3.cd到数据库所在目录 4.输入sqlite3 person.db(person.db为要操作的db名称,根据需要修改) 5.输入sql语句(每个 ...