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



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

  1. cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...

  2. 一键安装Android开发环境

    一键安装Android开发环境 1 下载tadp-3.0r4-linux-x64.run 进入下面的地址下载: https://developer.nvidia.com/gameworksdownlo ...

  3. Web项目也能一键打包Android、IOS

    随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...

  4. 路由器无线桥接 router wireless bridge

    实验环境:TP-Link A,TP-Link B,两个路由器都有子网,分别为子网 A,子网 B.TP-Link A连接学校子网 IP A,TP-Link B连接学校子网 IP B.两个路由器都能够通过 ...

  5. 路由器WDS桥接教程

    因为有吧友买了此款路由又不会桥接,因此做这个教程.老鸟自动路过,废话不多说,下面开始讲解. 1.wifi密码破解和路由器用户名和密码部分请自行解决,我只讲桥接部分.首先,在浏览器里输入192.168. ...

  6. cocos 3.0 一键打包android平台应该注意的细节

    cocos2d-x 移植越来越便捷,走到cocos2d-x-3.0rc2,能够说移植已经非常完好了,我们仅仅要进行适当的适配,cocos能够直接帮助我们生成apk 我网络不好无法上传图片:(无图无捷豹 ...

  7. 一键修改android 字体和图片大小.

    项目中需要动态更改 app的字体和图片, 在查阅中找到的更改主题的解决办法,和单独的修改字体的方法.  这两种方法的确有效果但是实现麻烦,在修改字体的过程中,找到一个额外的方法,  修改字体的实现更改 ...

  8. 一键获取Android的appActvity和PackName

    大家平常写Appium自动化时,可能写脚本半小时,得有5分钟用来去看Activity,大部分都是通过adb命令的方式来获取.为了提高效率,可以把这个命令放到python里去执行,然后根据规则去筛选出自 ...

  9. TP-LINK路由器桥接功能实现(WDS)

    弄过好几次路由器的桥接了,但每次都忘记了,要重新找资料.在此记录一下,方便以后使用. 准备工作: 1.设置本地连接/无线网络连接(取决于用哪个配置路由器):IP-192.168.1.100 掩码-25 ...

随机推荐

  1. linux下的oom调试笔记【原创】

    平台信息:内核:linux3.0.68 系统:android/android5.1平台:s5p4418 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 摘要:调整and ...

  2. Nginx配置指令location匹配符优先级和安全问题

    使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";"号,语句块用"{}"括起来. ...

  3. web 单一平台登录逻辑

    单点登录逻辑token=cookie('login_token');serverToken=get(token);if(serverToken!='注销'){ set('userid_已登录token ...

  4. typeof、instanceof、hasOwnProperty()、isPrototypeOf()

    typeof 操作符 instanceof 操作符 hasOwnProperty()方法 isPrototypeOf()方法 1.typeof 用于获取变量的类型,一般只返回以下几个值:string, ...

  5. [xPlugin] smartupload jsp图片上传

    URL:http://www.cnblogs.com/ISeeYouBlogs/p/jsp.html 1.要实现图片上传,首先需要一个组件,这里我用的是smartupload.jar可以到这里下载ht ...

  6. OnLineML:时序数据挖掘

    关于时序分析: 我们跟随时间的脚步,试图解释现在.理解过去.甚至预测未来........ 原文链接:http://blog.sciencenet.cn/home.php?mod=space&u ...

  7. 读书笔记「Python编程:从入门到实践」_2.变量和简单数据类型

    做了大半年RPA了,用的工具是Kapow. 工作没有那么忙,不想就这么荒废着,想学点什么.就Python吧. 为期三个月,希望能坚持下来. 2.1 变量的命名和使用 变量名只能包含字母.数字和下划线. ...

  8. 为my_string类创建复制构造函数copy constructor ,拷贝函数名和类同名

    为下面的my_string类创建一个复制构造函数,并将定义该类的代码提交. my_string类的定义: class my_string { char *s; public: my_string(ch ...

  9. 查看Linux系统版本信息的几种方法

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version 2.uname -a 二.查看Linux系统版本的命令(3种方法): 1.lsb_release -a,即可列出所 ...

  10. 【数据分析学习】Pandas思维导图

    点我查看原版