Android中使用BroadcastReceiver打開和關(guān)閉WIFI

由于自動(dòng)化測試需要庵楷,我們希望能夠簡單的控制Android手機(jī)的WIFI開和關(guān)翎承,而不是通過UI操作的方式蛉鹿。由于每個(gè)Android機(jī)型的UI都千差萬別取劫,所以需要找到一個(gè)通用得方式來滿足我們的需求。

最開始我想到了ADB忌卤,經(jīng)查扫夜,下面的命令的確可以滿足我們的要求,但是需要ROOT:

adb shell svc wifi disable/enable

果斷放棄驰徊,ROOT這事兒太麻煩笤闯,這么多手機(jī)我無法每個(gè)都ROOT,而且能不能成功都是個(gè)大大的問號(hào)棍厂。

因?yàn)橹熬陀邢胱鯝ndroid控制工具集的想法颗味,主要的工作原理是依靠Android本身BroadcastReceiver來接收廣播實(shí)現(xiàn)控制,這樣只要一條命令就可以了:

通過命令行執(zhí)行adb shell am broadcast發(fā)送廣播通知牺弹。

adb shell am broadcast 后面的參數(shù)有:[-a <ACTION>][-d <DATA_URI>][-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] ...] [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] [-n <COMPONENT>][-f <FLAGS>] [<URI>]

好了浦马,搞定了該用什么,其他就是實(shí)現(xiàn)的工作了(只介紹主要實(shí)現(xiàn))张漂。

首先晶默,先新建一個(gè)Android工程,然后在工程里寫B(tài)roadcastReceiver實(shí)現(xiàn):

package com.xingshulin.xsltestcontroller;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.util.Log;

public class WifiControllerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        
        if (intent.getAction().equals("com.xingshulin.wifiON")) {
            wifiManager.setWifiEnabled(true);
            Log.i("XSL_Test", "WIFI Enabled!");
        } else {
            wifiManager.setWifiEnabled(false);
            Log.i("XSL_Test", "WIFI disabled!");
        }
    }

}

灰常簡單有沒有航攒!其實(shí)沒幾句話就能實(shí)現(xiàn)我們的要求了磺陡。

接下來別忘了在AndroidManifest.xml添加我們的receiver和權(quán)限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xingshulin.xsltestcontroller"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
         <receiver android:name=".WifiControllerReceiver" >
            <intent-filter>
                <action android:name="com.xingshulin.wifiON" />
                <action android:name="com.xingshulin.wifiOFF" />
            </intent-filter>
        </receiver>
        
    </application>
    
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

</manifest>

大家要注意receiver里面的action,這個(gè)是可以我們自己定義的漠畜,在這里我用com.xingshulin.wifiON和com.xingshulin.wifiOFF分別控制WIFI的開和關(guān)仅政。

權(quán)限里面WIFI相關(guān)的是,這個(gè)也一定不能丟:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

好了盆驹。大功告成,打包裝到手機(jī)里滩愁,打開應(yīng)用躯喇,用下面的命令試驗(yàn)下:

開WIFI

am broadcast -a com.xingshulin.wifiON -n com.xingshulin.xsltestcontroller/.WifiControllerReceiver

關(guān)WIFI

am broadcast -a com.xingshulin.wifiOFF -n com.xingshulin.xsltestcontroller/.WifiControllerReceiver

是不是成功的?哈哈硝枉,但是在使用時(shí)有些點(diǎn)需要注意:

  1. 這個(gè)命令只有在APP打開時(shí)才會(huì)起作用廉丽,所以做自動(dòng)化時(shí)可以先用 "am start -n ..." 打開應(yīng)用
  2. 第一次運(yùn)行打開WIFI時(shí)手機(jī)會(huì)要權(quán)限,我們可以點(diǎn)擊允許并且設(shè)置為以后不再詢問妻味,這樣以后就不會(huì)有問題了正压。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市责球,隨后出現(xiàn)的幾起案子焦履,更是在濱河造成了極大的恐慌拓劝,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉裤,死亡現(xiàn)場離奇詭異郑临,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屑宠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門厢洞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人典奉,你說我怎么就攤上這事躺翻。” “怎么了卫玖?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵公你,是天一觀的道長。 經(jīng)常有香客問我骇笔,道長省店,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任笨触,我火速辦了婚禮懦傍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芦劣。我一直安慰自己粗俱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布虚吟。 她就那樣靜靜地躺著寸认,像睡著了一般。 火紅的嫁衣襯著肌膚如雪串慰。 梳的紋絲不亂的頭發(fā)上偏塞,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音邦鲫,去河邊找鬼灸叼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庆捺,可吹牛的內(nèi)容都是我干的古今。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滔以,長吁一口氣:“原來是場噩夢啊……” “哼捉腥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起你画,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤抵碟,失蹤者是張志新(化名)和其女友劉穎桃漾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立磁,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呈队,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唱歧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宪摧。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颅崩,靈堂內(nèi)的尸體忽然破棺而出几于,到底是詐尸還是另有隱情,我是刑警寧澤沿后,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布沿彭,位于F島的核電站,受9級(jí)特大地震影響尖滚,放射性物質(zhì)發(fā)生泄漏喉刘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一漆弄、第九天 我趴在偏房一處隱蔽的房頂上張望睦裳。 院中可真熱鬧,春花似錦撼唾、人聲如沸廉邑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛛蒙。三九已至,卻和暖如春渤愁,著一層夾襖步出監(jiān)牢的瞬間牵祟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工抖格, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留课舍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓他挎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捡需。 傳聞我的和親對(duì)象是個(gè)殘疾皇子办桨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 1:InputChannel提供函數(shù)創(chuàng)建底層的Pipe對(duì)象 2: 1)客戶端需要新建窗口 2)new ViewRo...
    自由人是工程師閱讀 5,308評(píng)論 0 18
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,419評(píng)論 0 17
  • 千千在微信群中 把陽光借給了 另一位美女 高平的 接下來的幾天 沁水站辉,都是 陰云密布
    天山之鷹閱讀 107評(píng)論 2 2
  • ?今天呢撞,想一個(gè)問候你伴侶的特殊而有心意方式损姜。滿心熱情地去做,問然后下定決心殊霞,要通過問候來表達(dá)你對(duì)他的愛意摧阅。 自我...
    芬芳悠容閱讀 167評(píng)論 0 0