路由器一键桥接Android实现
開始之前,首先说一下什么叫一键桥接,所谓一键桥接,就是点击一下。就能够对所连接的路由器进行网络中继设置。以实现路由器能够通过已有的无线路由器进行网络訪问。
那么实现这个功能有几种方法呢?能够说有非常多种。仅仅要能够和路由网关进行通信即可。一般能够选择。Socket通信,Http通信。对于Http通信能够选择HttpClient, HttpURLConnection等。在本文中,为了实现的方便。我们选择android的特性之中的一个,webkit。也即是使用WebView控件来实现一键桥接
一、WebView是什么
可參考:
http://blog.csdn.net/chenshijun0101/article/details/7045394
和:
http://blog.csdn.net/t12x3456/article/details/13769731/
二、看我实现
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
package com.leo.switchrouter;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.SystemClock;
import android.text.TextUtils;
import android.webkit.HttpAuthHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
/**
* @see 对桥接中须要的数据进行初始化
* @since 2015-06-17
* @author Leo
*
*/
public class SwitchRouterService extends Service {
/*定义的一些变量。注本文使用的路由器是GoAgent*/
private static final String TAG = "SwitchRouterService";
private SwitchRouterService mService = this;
private MWifiManager mWifiManager = null;
private SharedPreferences sp = null;
private Handler mHandler = null;
private WebView mWebView = null;
private String address = "10.10.10.254";
private String username = "admin";
private String bpassword = "admin";
private String npassword = "0123456789";
private String ssid = "Hui";
private int mode = 3;
private int type = 0;
private String url1 = "http://10.10.10.254/opmode.asp";
private String url2 = "http://10.10.10.254/wireless/apcli.asp";
private String url3 = "http://10.10.10.254/wireless/apcli.asp";
private String network = "";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
// super.handleMessage(msg);
int what = msg.what;
switch (what) {
case Constant.WHAT_START: {
isRunning = true;
toast("桥接刚開始,进入第一步,共三个步骤");
new Thread(new FirstRunnable()).start();
}
break;
case Constant.WHAT_FIRST: {
isRunning = true;
toast("第一步完毕,进入第二步,共三个步骤");
new Thread(new SecondRunnable()).start();
}
break;
case Constant.WHAT_SECOND: {
isRunning = true;
toast("第二步完毕。进入第三步。共三个步骤");
new Thread(new ThirdRunnable()).start();
}
break;
case Constant.WHAT_THIRD: {
toast("桥接已经完毕。祝你生活愉快");
stopSelf();
}
break;
default:
toast("地球人 我来自火星");
break;
}
}
};
initData();
mHandler.sendEmptyMessage(Constant.WHAT_START);
}
private void toast(String text) {
Toast.makeText(mService, text, Toast.LENGTH_SHORT).show();
}
private void initData() {
mWifiManager = new MWifiManager(this);
initValues();
initWebView();
}
private boolean isRunning = false;
private static final long DELAY = 5000;
private class FirstRunnable implements Runnable {
public void run() {
while (isRunning) {
System.out.println("I am the first step");
String now = mWifiManager.getNowWifiInfo().getSSID();
System.out.println(network + " " + now);
if (TextUtils.equals(now, network)) {
processFirst();
delay(DELAY);
isRunning = false;
mHandler.sendEmptyMessage(Constant.WHAT_FIRST);
}
}
}
}
private class SecondRunnable implements Runnable {
public void run() {
while (isRunning) {
System.out.println("I am the second step");
String now = mWifiManager.getNowWifiInfo().getSSID();
if (TextUtils.equals(now, network)) {
processSecond();
isRunning = false;
delay(DELAY);
mHandler.sendEmptyMessage(Constant.WHAT_SECOND);
}
}
}
}
private class ThirdRunnable implements Runnable {
public void run() {
while (isRunning) {
System.out.println("I am the third step");
String now = mWifiManager.getNowWifiInfo().getSSID();
if (TextUtils.equals(now, network)) {
processThird();
isRunning = false;
delay(DELAY);
mHandler.sendEmptyMessage(Constant.WHAT_THIRD);
}
}
}
}
private void delay(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*运行第一步,更改模式*/
private void processFirst() {
url1 = "http://" + address + "/opmode.asp";
mWebView.loadUrl(url1);
System.out.println("first:" + url1);
delay(DELAY);
mWebView.loadUrl("javascript:document.opmode.opMode[3].checked = true;changeMode();opmode_submit();");
}
/*第二步。填写中继源网络信息*/
private void processSecond() {
url2 = "http://" + address + "/wireless/apcli.asp";
mWebView.loadUrl(url2);
System.out.println("second:" + url2);
delay(DELAY);
mWebView.loadUrl("javascript:document.wireless_apcli.apcli_ssid.value = '"
+ ssid + "';");
mWebView.loadUrl("javascript:document.wireless_apcli.apcli_mode.options["
+ mode
+ "].selected = true;SecurityModeSwitch();EncryptModeSwitch();");
mWebView.loadUrl("javascript:document.wireless_apcli.apcli_enc.options["
+ type + "].selected = true;EncryptModeSwitch();");
mWebView.loadUrl("javascript:document.wireless_apcli.apcli_wpapsk.value = '"
+ npassword + "';document.wireless_apcli.submit();");
}
/*更改信道。本文中使用Auto选项。可在实际需求中进行信道筛选*/
private void processThird() {
url3 = "http://" + address + "/wireless/basic.asp";
mWebView.loadUrl(url3);
delay(DELAY);
mWebView.loadUrl("document.wireless_basic.sz11gChannel.options[0].selected = true;ChOnChange();document.wireless_basic.submit();");
}
private void initValues() {
sp = getSharedPreferences(Constant.SP_NAME, Context.MODE_PRIVATE);
address = sp.getString(Constant.KEY_ADDRESS, "10.10.10.254");
username = sp.getString(Constant.KEY_USERNAME, "admin");
bpassword = sp.getString(Constant.KEY_B_PASSWORD, "admin");
npassword = sp.getString(Constant.KEY_N_PASSWORD, "1234567890");
ssid = sp.getString(Constant.KEY_SSID, "Huicai");
mode = sp.getInt(Constant.KEY_MODE, 3);
type = sp.getInt(Constant.KEY_TYPE, 0);
network = sp.getString(Constant.KEY_NETWORK, "huicai");
}
/*对WebView进行初始化,使WebView能够操作JS,并自己主动登录*/
private void initWebView() {
mWebView = new WebView(this);
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
// TODO Auto-generated method stub
handler.proceed(username, bpassword);
// super.onReceivedHttpAuthRequest(view, handler, host, realm);
}
});
}
}
三、总结
本文中所使用的方法,是投机取巧了,通过JS代码非常easy的操作配置页面。然后通过WebView操作JS代码,非常easy实现想要实现的功能。
路由器一键桥接Android实现的更多相关文章
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...
- 一键安装Android开发环境
一键安装Android开发环境 1 下载tadp-3.0r4-linux-x64.run 进入下面的地址下载: https://developer.nvidia.com/gameworksdownlo ...
- Web项目也能一键打包Android、IOS
随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...
- 路由器无线桥接 router wireless bridge
实验环境:TP-Link A,TP-Link B,两个路由器都有子网,分别为子网 A,子网 B.TP-Link A连接学校子网 IP A,TP-Link B连接学校子网 IP B.两个路由器都能够通过 ...
- 路由器WDS桥接教程
因为有吧友买了此款路由又不会桥接,因此做这个教程.老鸟自动路过,废话不多说,下面开始讲解. 1.wifi密码破解和路由器用户名和密码部分请自行解决,我只讲桥接部分.首先,在浏览器里输入192.168. ...
- cocos 3.0 一键打包android平台应该注意的细节
cocos2d-x 移植越来越便捷,走到cocos2d-x-3.0rc2,能够说移植已经非常完好了,我们仅仅要进行适当的适配,cocos能够直接帮助我们生成apk 我网络不好无法上传图片:(无图无捷豹 ...
- 一键修改android 字体和图片大小.
项目中需要动态更改 app的字体和图片, 在查阅中找到的更改主题的解决办法,和单独的修改字体的方法. 这两种方法的确有效果但是实现麻烦,在修改字体的过程中,找到一个额外的方法, 修改字体的实现更改 ...
- 一键获取Android的appActvity和PackName
大家平常写Appium自动化时,可能写脚本半小时,得有5分钟用来去看Activity,大部分都是通过adb命令的方式来获取.为了提高效率,可以把这个命令放到python里去执行,然后根据规则去筛选出自 ...
- TP-LINK路由器桥接功能实现(WDS)
弄过好几次路由器的桥接了,但每次都忘记了,要重新找资料.在此记录一下,方便以后使用. 准备工作: 1.设置本地连接/无线网络连接(取决于用哪个配置路由器):IP-192.168.1.100 掩码-25 ...
随机推荐
- [SPOJ 30669] Ada and Trip
[题目链接] https://www.spoj.com/problems/ADATRIP/ [算法] 直接使用dijkstra堆优化算法即可 [代码] #include<bits/stdc++. ...
- 框架-Java:Spring Cloud
ylbtech-框架-Java:Spring Cloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册. ...
- 给统计人讲Python(1)_科学计算库-Numpy
本地代码是.ipynb格式的转换到博客上很麻烦,这里展示部分代码,了解更多可以查看我的git-hub:https://github.com/Yangami/Python-for-Statisticia ...
- HUdson2092整数解
2019-05-17 16:04:37 加油,坚持就是胜利,fightting m / i的情况,i可能等于0 #include <bits/stdc++.h> using namespa ...
- 利用python开发的flappy bird 游戏
python 中 pygame模块能让我们很方便的编写游戏,16年我用python 仿制了flappy bird 游戏,下面是游戏的完整代码以及素材,分享给大家. 第一个python文件,flappy ...
- ios UISegmentedControl的使用简介
初始化UISegmentedControl NSArray *arr = [[NSArray alloc]initWithObjects:@"轻拍",@"长按" ...
- NOIP2011 day2 第一题 计算系数
计算系数 NOIP2011 day2 第一题 描述 给定一个多项式(ax+by)^k,请求出多项式展开后x^n*y^m项的系数. 输入格式 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m, ...
- P3399 丝绸之路
题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...
- python版本及ML库
一:关于Python版本的选择问题 关于Python的选择问题:要看学术界能不能把科学库迁移到Python3. 1:多个版本共用: 最近发现SciPy的最高版本是3.2,只能是退而求其次,不使用最新版 ...
- Java入门第一季——从此投身Java??
找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季 一.简 ...