開始之前,首先说一下什么叫一键桥接,所谓一键桥接,就是点击一下。就能够对所连接的路由器进行网络中继设置。以实现路由器能够通过已有的无线路由器进行网络訪问。

那么实现这个功能有几种方法呢?能够说有非常多种。仅仅要能够和路由网关进行通信即可。一般能够选择。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实现相关推荐

  1. android设置路由器,如何在Android手机上设置无线路由器以实现WiFi互联网访问

    编辑有话要说: 随着娱乐和业务便携性需求的不断增长,越来越多的手机具有内置的Wi-Fi功能,并且越来越多的Android爱好者.今天,我将介绍如何设置Android手机wifi上网. 无线路由器等效于 ...

  2. 两个tplink路由器有线桥接_路由器有线桥接设置方法

    路由器有线桥接设置方法 如何通过网线将两个路由器进行桥接,共同实现上网? 方法1:接副路由器的WAN口 1.网线分别接在主路由器的LAN口和一接在副路由器的WAN口上. 2.先配置好副路由器,这个时先 ...

  3. 两个tplink路由器有线桥接_tplink和腾达路由器有线桥接设置图解

    本文主要介绍了tplink和腾达路由器有线桥接设置方法,注意是有线桥接,不是无线桥接. 有线桥接的意思是,用网线连接tplink路由器与腾达路由器,并进行相关设置,设置后两个路由器都能够上网. 如果你 ...

  4. dhcp只能分配与路由器相同网段么_路由器的桥接详解

    网上关于路由器无线桥接的教程很多,让你注意那注意这的,都没有说明白.今天,我来试着缕清它们间的关系! 1.主路由器 这是我主路由器目前的状态,其中IP地址是我在上级光猫路由的可用ip段192.168. ...

  5. 多个路由器无线桥接,共享网络

    想要扩展wifi的范围并且保持稳定性路由器桥接和无线中继该如何选择? 家里的网是联通10M的,之前一直用的tplink.由于家里位置比较特殊,网线的位置在角落的卧室里,为了全家都有wifi信号,用了两 ...

  6. 服务器无线桥接技巧,两个路由器无线桥接完美教程【图】

    摘 要 原标题:"两个路由器无线桥接怎么设置?[图]"的相关路由器192.168.1.1登陆页面设置教程资料分享.- 来源:路由器之家. 本文鸿哥主要给大家介绍下,两个路由器无线桥 ...

  7. K2P设置为桥接路由器教程

    1.路由器恢复初始状态,然后设置wifi密码. 2.设置k2p连接为自动获取ip. 3.设置LAN.与主路由器ip不一致,例如,主路由器为192.168.2.1,则桥接路由器设置为192.168.2. ...

  8. PS 一键生成Android各个尺寸的图标

    之前的项目都是用一套尺寸的图标做适配,优点就是减少APP的大小,还不用做多套适配图标,缺点就是每次加载图标都要做缩放,影响APP的性能. 公司最近终于招到UI了,发现他的PS工具可以一键生成Andro ...

  9. android 5.0一键刷机教程,HTC D820t (Desire 820 移动4G Android 5.0)一键刷机教程,轻松刷机...

    玩安卓手机最大的乐趣当然就是刷机了,手机使用一段时间后,运行会变得迟缓,为了让手机变的更加流畅或体验各OS系统,我们通常都会通过刷机来提高HTC D820t (Desire 820 移动4G Andr ...

最新文章

  1. nginx中配置react-router参数跳转
  2. BUUCTF(pwn)[HarekazeCTF2019]baby_rop
  3. python3输入的input()坑
  4. Spring Boot程序无法加载主类解决方法
  5. sklearn字典特征提取
  6. webpack图解-学习笔记
  7. 作者:王建新(1969-),博士,中南大学信息科学与工程学院教授,中国计算机学会高级会员。...
  8. java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
  9. oracle增删控制文件,控制文件的增删改及备份
  10. html登录界面设计代码_最简洁实现Github登录的JS代码示例
  11. java 注解报错_eclipse编译项目:Java @Override 注解报错的解决方法
  12. WSS3 Elevation of Privilege 替代 用户身份模拟Impersonate 进行权限提升
  13. 安装Keil uVision5 破解失败
  14. android 模拟器 锁屏,如何在模拟器中测试Android锁屏小部件?
  15. 虾皮测试面试——凉经
  16. h5 js 打开微信客户端
  17. win10音频服务器未修复,win10十月更新音频输出设备未安装错误修复教程
  18. IDR 关键帧 GOP
  19. R语言学习笔记之str函数
  20. Java故事之路在脚下

热门文章

  1. 清除FTP登录的用户名密码
  2. 多边形分解成三角形算法, 耳切法
  3. 常用的技术网站(一)
  4. 5G/NR 5G核心网(5GC)之网络功能服务通信
  5. xs128 D-Flash读写
  6. Python编写手机App————kivy
  7. 大数据毕设 航空公司客户价值分析
  8. 【Javascript】javascript 中的指针
  9. floyed算法、dijkstra算法、SPFA算法
  10. Matlab中FFT运算加窗函数的验证