2013-02-08 25 views
17

Cách thức khởi động Android bằng adb - Tôi muốn thức dậy (nếu ngủ) Thiết bị đầu cuối Android trước khi gỡ lỗi mọi phiên bản ứng dụng mới.Đánh thức Android bằng adb hoặc Eclipse (ngay trước khi gỡ lỗi)?

Luồng điển hình là: 1. Tôi thực hiện một số thay đổi trong Eclipse. 2. Trong khi chờ màn hình tắt hay không. 3. Tôi chạy "gỡ lỗi" và muốn màn hình buộc phải thức dậy.

Tôi đã tìm thấy một phương pháp có mô phỏng "phím nguồn" nhưng nó không bật nhưng thay vì bật tắt trạng thái nguồn. Tôi không muốn thêm mã phụ vào ứng dụng của mình. Các phương pháp khác để thực hiện nhiệm vụ tầm thường như thế nào, xin vui lòng giúp đỡ.

Trả lời

2

Bạn có thể kiểm tra trạng thái nguồn hiện tại của thiết bị (bao gồm hiển thị) qua adb với lệnh dumpsys power và chỉ gửi sự kiện nhấn phím nguồn nếu màn hình tắt. Giải pháp dễ dàng hơn sẽ vô hiệu hóa thời gian chờ hiển thị hoàn toàn "trong khi kết nối với USB" trong tùy chọn Nhà phát triển.

+0

Cám ơn giải pháp tôi sẽ viết một số kịch bản nhỏ. Có, tôi có thể vô hiệu hóa thời gian chờ hiển thị "trong khi kết nối với USB" nhưng nó ngừng sạc tốt hơn là chỉ cần chuyển đổi trước khi gỡ lỗi vì nó rất nhanh. – Chameleon

3

bạn cũng có thể thêm các cờ sau để onCreate() của bạn vào các hoạt động chính của bạn:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

Bằng cách này thiết bị của bạn nên thức dậy khi nó được nạp vào thiết bị thông qua Eclipse.

+0

giải pháp rất đẹp. – RichieHH

8

Đây là những gì tôi đã đưa ra:

adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell input keyevent 26 

này đầu tiên sẽ kiểm tra xem nếu màn hình đang bật. Nếu không, nó sẽ mô phỏng phím nguồn, sẽ bật màn hình của thiết bị.

+0

phần 'xargs -0 test -z &&' của lệnh này đang làm gì? Đây là sự hiểu biết của tôi, xin vui lòng cho tôi biết nếu Im chính xác: 'xargs -0' xác minh rằng văn bản mScreenOn đã thành công" grepped " và nếu vậy' && ' 'adb shell keyevent 26' được gọi là ?? Là lệnh test -z cần thiết cho điều này và nếu như vậy ... nó đang làm gì? –

+0

Điều đó có thay đổi theo thời gian không? Trên một kitkat và trên một thiết bị lollipop không có mScreenOn. – rekire

+0

Đối với API mới nhất, hãy sử dụng 'adb shell dumpsys power | grep "Display Power: state = ON" | xargs -0 test -z && adb shell input key event 26' –

0

Đối với Windows và Eclipse bạn có thể sử dụng .bat file:

@ECHO OFF 
setlocal 
for /f "delims= tokens=1*" %%a in ('adb shell dumpsys power ^| findstr.exe "mScreenOn="') DO (
for /f "delims== tokens=2*" %%S in ("%%a") do (
if "%%S" == "false" (goto move1) else (goto move2) 
) 
) 

:move1 
adb shell input keyevent 26 
goto end 

:move2 
goto end 

:end 
exit 

Nó sẽ kiểm tra, nếu màn hình tắt nó sẽ chuyển sang trạng thái năng lượng. Để sử dụng nó với Eclipse, tệp .bat này sẽ được sử dụng làm "Công cụ bên ngoài" (chỉ cần điền đường dẫn đến .bat) và được liên kết với dự án trong thuộc tính của nó (Trình xây dựng - Nhập -).

0

Tôi đã sử dụng phần sau để đánh thức thiết bị từ xa để kiểm tra tự động. Nếu màn hình không bật, khi đó màn hình sẽ nhấn nút nguồn, tiếp theo là nút menu.

(
    cd ${platform-tools}; 
    ./adb shell dumpsys power | grep -i 'SCREEN_ON' >/dev/null; 
    if [ $? -eq 0 ]; then 
    echo "Screen is on..."; 
    else 
    echo "Pressing buttons to wake-up..."; 
    # http://developer.android.com/reference/android/view/KeyEvent.html 
    ./adb shell input keyevent 26; # Power 
    ./adb shell input keyevent 82; # Menu 
    echo "Pausing for state to settle..."; 
    sleep 1; 
    ./adb shell dumpsys power | grep -i 'SCREEN_ON'; 
    fi; 
    echo '---'; 
    ./adb shell dumpsys power | grep -i 'SCREEN' 
) 
15

Chỉ cần sử dụng:

adb shell input keyevent 26 
+0

cái này là kiểu dáng đẹp nhờ – tsanzol

+0

26 == KEYCODE_POWER. Ngoài ra còn có một KEYCODE_WAKE mà sẽ không có hiệu lực nếu thiết bị đã tỉnh táo. Xem câu trả lời của tôi: http://stackoverflow.com/a/33683205/1172494 –

22
adb shell input keyevent KEYCODE_WAKEUP 

Như đã trình bày here, này tỉnh dậy thiết bị. Hoạt động giống như KEYCODE_POWER nhưng nó không có tác dụng nếu thiết bị đã tỉnh táo.

Để chuyển đổi Sleep/Wake với một lệnh bạn có thể phát hành

adb shell input keyevent KEYCODE_POWER 
+0

Tôi sau khi chèn mã, nó nói "Đã chết". Đã thêm – rahman

+0

KEYCODE_WAKEUP vào cấp API 20 // ref: https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_WAKEUP – yurenchen

0

Tôi biết rằng điều này là trái ngược với những gì các OP được yêu cầu, nhưng tôi muốn chỉ ra định nghĩa về "thực sự ngủ" cho khác độc giả: Nếu adb đang hoạt động, thì thiết bị không thực sự ngủ, vì USB đang bật và lời nhắc lệnh đang chạy (vỏ adb khác hoạt động như thế nào?). Khi hoàn toàn ngủ, chỉ nút nguồn vật lý mới đánh thức được (trừ khi các nút khác được chọn làm nguồn thức ăn trong BSP). Dự án của tôi thu hút khoảng 120mA với màn hình tắt, nhưng chỉ 23mA ở chế độ ngủ (ngắt kết nối cáp USB)."khóa shell đầu vào adb 26" không hoạt động ở chế độ này. Bàn điều khiển nối tiếp cũng không. Lịch thi đấu của tôi không có quyền truy cập vào pin và đường dây điện ngoài riêng biệt. Tôi có thể chuyển đổi đường dây điện (với pin được kết nối) để đánh thức nó. Tôi cũng có một hub USB được chuyển đổi để ngắt kết nối USB đặc biệt cho phần giấc ngủ của thử nghiệm.

Tôi hy vọng điều này có thể giúp ích cho ai đó.

1

nếu bạn thực hiện adb shell input keyevent KEYCODE_POWER và nhận Killed, bạn nên sử dụng người dùng root bằng cách thực hiện su trước đây.

ngủ: (adb shell) input keyevent KEYCODE_SLEEP

wakeup: (adb shell) input keyevent KEYCODE_WAKEUP

Toggle: (adb shell) input keyevent KEYCODE_POWER

Các vấn đề liên quan