android 桥接,路由器一键桥接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/
二、看我实现
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 桥接,路由器一键桥接Android实现相关推荐
- android设置路由器,如何在Android手机上设置无线路由器以实现WiFi互联网访问
编辑有话要说: 随着娱乐和业务便携性需求的不断增长,越来越多的手机具有内置的Wi-Fi功能,并且越来越多的Android爱好者.今天,我将介绍如何设置Android手机wifi上网. 无线路由器等效于 ...
- 两个tplink路由器有线桥接_路由器有线桥接设置方法
路由器有线桥接设置方法 如何通过网线将两个路由器进行桥接,共同实现上网? 方法1:接副路由器的WAN口 1.网线分别接在主路由器的LAN口和一接在副路由器的WAN口上. 2.先配置好副路由器,这个时先 ...
- 两个tplink路由器有线桥接_tplink和腾达路由器有线桥接设置图解
本文主要介绍了tplink和腾达路由器有线桥接设置方法,注意是有线桥接,不是无线桥接. 有线桥接的意思是,用网线连接tplink路由器与腾达路由器,并进行相关设置,设置后两个路由器都能够上网. 如果你 ...
- dhcp只能分配与路由器相同网段么_路由器的桥接详解
网上关于路由器无线桥接的教程很多,让你注意那注意这的,都没有说明白.今天,我来试着缕清它们间的关系! 1.主路由器 这是我主路由器目前的状态,其中IP地址是我在上级光猫路由的可用ip段192.168. ...
- 多个路由器无线桥接,共享网络
想要扩展wifi的范围并且保持稳定性路由器桥接和无线中继该如何选择? 家里的网是联通10M的,之前一直用的tplink.由于家里位置比较特殊,网线的位置在角落的卧室里,为了全家都有wifi信号,用了两 ...
- 服务器无线桥接技巧,两个路由器无线桥接完美教程【图】
摘 要 原标题:"两个路由器无线桥接怎么设置?[图]"的相关路由器192.168.1.1登陆页面设置教程资料分享.- 来源:路由器之家. 本文鸿哥主要给大家介绍下,两个路由器无线桥 ...
- K2P设置为桥接路由器教程
1.路由器恢复初始状态,然后设置wifi密码. 2.设置k2p连接为自动获取ip. 3.设置LAN.与主路由器ip不一致,例如,主路由器为192.168.2.1,则桥接路由器设置为192.168.2. ...
- PS 一键生成Android各个尺寸的图标
之前的项目都是用一套尺寸的图标做适配,优点就是减少APP的大小,还不用做多套适配图标,缺点就是每次加载图标都要做缩放,影响APP的性能. 公司最近终于招到UI了,发现他的PS工具可以一键生成Andro ...
- android 5.0一键刷机教程,HTC D820t (Desire 820 移动4G Android 5.0)一键刷机教程,轻松刷机...
玩安卓手机最大的乐趣当然就是刷机了,手机使用一段时间后,运行会变得迟缓,为了让手机变的更加流畅或体验各OS系统,我们通常都会通过刷机来提高HTC D820t (Desire 820 移动4G Andr ...
最新文章
- nginx中配置react-router参数跳转
- BUUCTF(pwn)[HarekazeCTF2019]baby_rop
- python3输入的input()坑
- Spring Boot程序无法加载主类解决方法
- sklearn字典特征提取
- webpack图解-学习笔记
- 作者:王建新(1969-),博士,中南大学信息科学与工程学院教授,中国计算机学会高级会员。...
- java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
- oracle增删控制文件,控制文件的增删改及备份
- html登录界面设计代码_最简洁实现Github登录的JS代码示例
- java 注解报错_eclipse编译项目:Java @Override 注解报错的解决方法
- WSS3 Elevation of Privilege 替代 用户身份模拟Impersonate 进行权限提升
- 安装Keil uVision5 破解失败
- android 模拟器 锁屏,如何在模拟器中测试Android锁屏小部件?
- 虾皮测试面试——凉经
- h5 js 打开微信客户端
- win10音频服务器未修复,win10十月更新音频输出设备未安装错误修复教程
- IDR 关键帧 GOP
- R语言学习笔记之str函数
- Java故事之路在脚下