18

如何使用 adb 在我的 android 手机上执行一些自动化任务?我需要找到可以从命令行发出的命令(理想情况下,使用 .bat 文件),这些命令不仅仅是打开应用程序或发送输入键事件(按下按钮)。

例如,我想从命令行打开或关闭飞行模式。目前,我能做的最好的事情是启动无线和网络设置菜单,然后使用输入键事件单击飞行模式:

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 & adb shell input keyevent 23

这种方法有很多缺点,主要是屏幕必须打开并解锁。此外,我想做的任务比这个简单的例子要广泛得多。如果可能的话,我想做的其他事情:

1.播放 mp3 并将其设置为重复播放。当前解决方案:

adb shell am start -n com.android.music/.MusicBrowserActivity
adb shell input keyevent 84
adb shell input keyevent 56 & adb shell input keyevent 66 & adb shell input keyevent 67 & adb shell input keyevent 19
adb shell input keyevent 23 & adb shell input keyevent 21
adb shell input keyevent 19 & adb shell input keyevent 19 & adb shell input keyevent 19 & adb shell input keyevent 22 & adb shell input keyevent 22 & adb shell input keyevent 23 & adb shell input keyevent 23

2.播放视频。(目前的解决方案:打开MediaGallery,发送keyevents,类似上面)

3.改变音量(当前解决方案:发送音量增大按钮keyevents)

4.更改显示超时(当前解决方案:打开声音和显示设置,发送keyevents)

和以前一样,这些都需要打开和解锁屏幕。使用 keyevents 的另一个主要缺点是如果应用程序的 UI 发生更改,keyevents 将不再执行正确的功能。如果没有更简单的方法来做这些事情,是否至少有一种方法可以在屏幕关闭时打开屏幕(使用 adb)?或者在屏幕关闭时让按键事件仍然有效?

我对java不是很熟悉。也就是说,我已经看到了如下代码(来源:http: //yenliangl.blogspot.com/2009/12/toggle-airplane-mode.html)来更改手机上的设置:

Settings.System.putInt(Settings.System.AIRPLANE_MODE_ON, 1 /* 1 or 0 */);

如何将上述内容转换为 adb shell 命令?这是可能的,还是错误的思考方式?

如果需要,我可以提供更多详细信息。谢谢!

4

4 回答 4

16

尽管问题很旧,但它可能对其他人有所帮助。

对于视频播放,你可以试试这个:

adb shell am start -a android.intent.action.VIEW -d   "file:///mnt/sdcard/DCIM/Camera/test.3gp" -t "video/*" 

^ 提示您可以播放此文件的所有有能力的玩家。

adb shell am start -a android.intent.action.VIEW -d "file:///mnt/sdcard/DCIM/Camera/test.3gp" -t "video/*" -n "com.alensw.PicFolder/.PlayerActivity" 

^在开关 -n 指定的播放器中播放。

于 2012-07-03T12:17:14.533 回答
3

我正在处理同一组问题。(我主要通过使用 keyevent HOME 然后 MENU 解决了直接按下按钮的上下文问题,但是——不知何故——即使这样也不可靠。)我目前正在研究SL4A(Android 脚本层),它有希望。它允许 Perl、Python、Lua 和其他脚本语言在设备上启动 SL4A 服务器后从您的 PC 与 Android API 进行交互——这也可以从 PC 完成。我发现“带有 SL4A 的 Pro Android Python ”是一个很好的资源;如果我从那本书开始,我会为自己节省几天的反复试验和在网上寻找的时间

于 2011-10-12T13:44:18.687 回答
0

您展示的 Java 示例适用于在手机本身上运行的程序。您也许可以在手机上编写某种解释器来处理 adb 命令。这样你就不再依赖于关键事件了。然而,这不是一项小事。

于 2010-02-04T22:03:11.953 回答
-2

MonkeyRunner看起来也很有希望,尽管我还没有深入挖掘到它的极限。

Android ScreenCast可让您从 PC 上查看和控制设备的屏幕,这也具有自动化的潜力。不过,它确实为该应用程序带来了一些后勤问题。

顺便说一句,您可以使用 MENU 键事件和一组发送事件(代替键事件)越过锁定的主屏幕。

于 2011-10-12T13:47:19.590 回答