一 背景
朋友請我幫他實現一個小功能:安卓手機定時循環開關飛行模式(目的是為了保持網絡活性)
以下是pass掉的方案:
- 打包成系統app,必須有安卓系統簽名,再怎么花里胡哨(如放到/system/app/下等)都繞不開簽名。
- 手機root,無論是發廣播還是android code直接runtime.exec,都離不開root權限。但考慮到他提供的樣機都不好root,刷機的形式很不走量,他的十幾部手機不可能給他挨個刷了。
- 用傳統廣播或者api的形式,已經不可用,傳統流氓api都是安卓4以前了,現在的安卓安全性越來越高。樣機是安卓10,目前市場已經是安卓11。
最后發現朋友要求也沒太苛刻,他要用這個功能的時候,只是某個特定的時間段,而且旁邊會有一台windows電腦。手機也可以用usb連接電腦。這就好辦很多了。
某個特定時間段,說明不需要開機啟動+保活+不能卸載;有windows電腦且可以連接usb說明我們可以用adb來發送命令(且可以不用wifi連接,那么腳本更容易編寫了)
二 windows下安裝adb
本人是用的android studio自帶的adb工具+配置環境變量。
若非安卓開發人員請自行百度。
最后需要能在cmd中輸入adb得到相關信息才表示安裝成功。
C:\Users\lrj>adb Android Debug Bridge version 1.0.41 Version 31.0.2-7242960 Installed as C:\Users\lrj\AppData\Local\Android\Sdk\platform-tools\adb.exe
三 adb調試飛行模式
首先把樣機的開發者模式打開(不同的記性不一樣,大多都是關於本機-安卓版本,連擊10次)
usb連接電腦和手機,手機彈窗相關都點擊確認(密鑰獲取,打開調試,文件傳輸模式等)
打開cmd分別輸入以下兩行命令,觀察對應的樣機是否相應的開啟\關閉飛行模式,如果是則說明調試成功。
C:\Users\lrj>adb shell settings put global airplane_mode_on 1 C:\Users\lrj>adb shell settings put global airplane_mode_on 0
四 編寫bat腳本
原本可以寫個簡單的開關命令,然后利用windows計划任務來實現循環+定時功能。后來發現windows的計划任務沒有linux的那么精確,最小單位是一天。 而我是想實現秒級的可控可設置的功能,所以還是多寫幾行吧。
@echo off @echo= @echo Lu Renjia, welcome! @echo= @echo= set /p a=Please input the duration of flight mode(s): set /p b=Please enter the flight mode interval(s): :start adb shell settings put global airplane_mode_on 1 @echo %date% %time:~0,8% plan on @ping -n %a% 127.1 >nul adb shell settings put global airplane_mode_on 0 @echo %date% %time:~0,8% plan off choice /t %b% /d y /n >nul goto start
echo off是回文展示;
set /p是輸入變量
:start choice goto start是循環定時
echo %date%是展示當前時間及相關精度
@ping那一行相當於linux的sleep
adb那兩行分別對應開啟/關閉飛行模式

