ADB Receive broadcast BOOT_COMPLETE

2019-01-07 20:38发布

问题:

I want to wait until the android mobile phone has started and the MediaScanner is done.

Afterwards I want to perform an action using adb.

adb wait-for-device will finish much before the boot sequence of the cell phone is done.

How to capture e.g. BOOT_COMPLETE Broadcast via ADB? Something like: wait-for-boot-complete. I don know whether this is possible?

回答1:

You can keep polling for sys.boot_completed or dev.bootcomplete system properties.

As for the code, I do not know what environment and/or scripting language you are using. It's pretty straightforward. First you need to find which property is being set to "1" up on boot completion by your phone's software. Let's say it is dev.bootcomplete. Then the following command would return control back to your script after the phone is booted up

adb wait-for-device shell 'while [[ -z $(getprop dev.bootcomplete) ]] ; do sleep 1; done'


回答2:

For those of you working in a Windows environment, this batch script works for me.

It waits until the ADB daemon is running, then begins polling the sys.boot_completed property and waiting for a value of 1.

It's not as elegant as a single line, but I have the script listed in my PATH environment variable so it can be called directly.

adb wait-for-device

:CheckAgain
set value=
for /f "delims=" %%a in ('adb shell getprop sys.boot_completed') do @set value=%%a

IF NOT "%value%" == "1" (
    timeout /t 2 /nobreak >NUL
    goto CheckAgain
)


回答3:

If your device does not have busybox installed (see shell script in android gives [: not found), you can try to iterate in your computer. Something like this would work:

while [ `adb shell getprop dev.bootcomplete` -nq "1" ] ; do sleep 1; done

If your device have busybox installed, you can proceed as Alex P. commented:

adb shell 'while [ ""`getprop dev.bootcomplete` != "1" ] ; do sleep 1; done'

Of course the syntax depends on your machine (POSIX, etc).



标签: android adb boot