2012-12-12 22 views
41

क्या एडीबी के माध्यम से एंड्रॉइड स्क्रीन लॉक करने का कोई तरीका है?एडीबी के माध्यम से एंड्रॉइड स्क्रीन को कैसे लॉक करें?

मुझे एक एपीके में डिस्प्ले लॉक करने के तरीके मिलते हैं, लेकिन मैं टाइमआउट के इंतजार किए बिना डिस्प्ले टाइमआउट अनुकरण करने के लिए स्क्रीन को एडीबी के माध्यम से पीसी से लॉक करना चाहता हूं।

क्या ऐसा करना संभव है?

धन्यवाद, डायने

+0

लॉक/अनलॉक बिजली बंद/चालू है? यह मेरे लिए बिजली बंद/चालू के रूप में काम करता है। – ransh

उत्तर

62

बढ़िया, मैंने अभी KEYCODE_POWER पाया जो है 26.

तो यह काम करता है भेजने के द्वारा:

adb shell input keyevent 26 

जो स्क्रीन को लॉक करता है, तो स्क्रीन अनलॉक है। अगर स्क्रीन पहले ही लॉक हो चुकी है, तो यह डिवाइस को जगा देती है।

मेरा अनुमान है कि यह सुनिश्चित करने का एकमात्र तरीका है कि स्क्रीन लॉक (ऑफ) है, अनलॉक करना है (हम कुंजीवेन्ट 82 (मेनू) का उपयोग करते हैं, फिर इसे पावर बटन कीवेंक से लॉक करें। क्या किसी को इसका कोई विचार है । आप यदि सही है?

+0

यह बढ़िया है, मैंने इसे विंडोज डेस्कटॉप पर बैच फ़ाइल के रूप में रखा और इसमें शॉर्टकट कुंजी जोड़ा। – AVEbrahimi

+0

दुख की बात यह है कि यह cubietruck पर बिजली के रूप में काम करता है और डिवाइस –

+0

बंद कर देता है यह बहुत अच्छा है। मुझे रिवर्स में एक ही समस्या थी - जिस डिवाइस का मैं उपयोग कर रहा हूं वह सो जाता है, और इसमें कोई कठोर कुंजी नहीं है, इसलिए मुझे इसे हर समय रीसेट करना होगा। इसके साथ, यह एक जागने की तरह है ("पावर" बटन दबाकर)। धन्यवाद। – CJBS

5

आप पहले से ही एक समाधान मिल गया है, लेकिन मैं वैसे भी यहां संदर्भ के लिए इस कोड डाल देता हूँ।

तुम कर सकते हो क्या दो बार घटना के लिए "प्रेस" पावर बटन इंजेक्षन करने के लिए है डिवाइस की स्थिति (ऑन/ऑफ डिस्प्ले) को नहीं जानते हैं, जांचें कि स्क्रीन चालू है या बंद है और तदनुसार पावर बटन दबाएं।

यहां एक सरल monkeyrunner स्क्रिप्ट:

import re 
from java.util import * 
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
device = MonkeyRunner.waitForConnection()  # connect to a device 
device.shell("input keyevent KEYCODE_POWER") # turn screen off (or on?) 
res = device.shell("dumpsys power")    # fetch power state 
m = re.search(r'.*mPowerState=([0-9]+).*', res) # parse the string 
if m and int(m.group(1)) == 0:     # screen is off 
    device.shell("input keyevent KEYCODE_POWER") # turn the screen on 
+1

mPowerState एक int नहीं हो सकता है। सैमसंग गैलेक्सी एसआईआईआई पर, लाइन है: mPowerState = SCREEN_BRIGHT_BIT SCREEN_ON_BIT –

+0

@Jakub: उत्तर देने के लिए धन्यवाद! क्षमा करें मुझे पर ध्यान देने में बहुत लंबा लगा। मैं एडीबी कमांड और कुछ शैल स्क्रिप्ट का उपयोग कर पर्ल स्क्रिप्ट से लगभग पूरी तरह से काम करता हूं। लेकिन जब मैं इस तरह की चीजों को और अधिक करने की ज़रूरत है तो मैं इसे सत्ता के लिए अपने रेफरी में डालूंगा। – PurpleDiane

+0

@ जुसुसो: यह जानना अच्छा है, धन्यवाद। मैं टेस्ट फोन के साथ काम करता हूं इसलिए यह जानना अच्छा होता है कि कोई अलग दिख सकता है। – PurpleDiane

1

एंड्रॉयड (4.2+ कम से कम) के पिछले संस्करणों का उपयोग करने वालों के लिए, dumpsys power एक अलग उत्पादन है।
mPowerState= का उपयोग करने के बजाय @Jakub Czaplicki द्वारा दिए गए उत्तर के रूप में, मैंने mScreenOn= का उपयोग किया।

p = Runtime.getRuntime().exec("su", null, null); 
OutputStream o = p.getOutputStream(); 
o.write(("dumpsys power").getBytes("ASCII")); 
o.flush(); 
o.close(); 
p.waitFor(); 

boolean screenState; 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
while ((res = in.readLine()) != null) dump += res; 
screenState = dump.charAt(dump.indexOf("mScreenOn=") + 10) == 't'; 

screenStatetrue( पर स्क्रीन ), या false(स्क्रीन बंद) है।

8

यहाँ जो की जाँच करता है एक ही पार्टी लिपि में पूरी बात करता है, तो स्क्रीन पर या नहीं वास्तव में है और उसके बाद उठता है और एक शॉट में स्क्रीन बातें बताता है:

if [ "$(adb shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then 
    echo "Screen is off. Turning on." 
    adb shell input keyevent 26 # wakeup 
    adb shell input keyevent 82 # unlock 
    echo "OK, should be on now." 
else 
    echo "Screen is already on." 
fi 
14

माइकल आर हाइन्स दिया तर्कसंगत रूप से सबसे आसान समाधान क्या है। हालांकि, एंड्रॉइड के बाद के संस्करणों में निम्न पंक्ति उपयोगी नहीं है।

adb shell input keyevent 82 # unlock 

मैंने व्यक्तिगत डिवाइस के लिए निर्देशांक का उपयोग करके खोल स्क्रिप्ट को अद्यतन किया है (टैबलेट)। मेरा टैबलेट लॉकस्क्रीन घटनाओं के लिए अभिविन्यास परिवर्तनों का समर्थन नहीं करता है, इसलिए मान हमेशा काम करते हैं क्योंकि लॉकस्क्रीन हमेशा परिदृश्य में होती है। क्या आपको अभिविन्यास परिवर्तन का पता लगाने की आवश्यकता होनी चाहिए, तो अभिविन्यास के लिए उपयोग करने के लिए सही निर्देशांक चुनने में एक सरल/फिर/और पर्याप्त होगा।

#!/bin/bash 
if [ "$(adb shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)')" == false ] ; then 
    echo "Screen is off. Turning on." 
    adb shell input keyevent 26 # wakeup 
    adb shell input touchscreen swipe 930 380 1080 380 # unlock 
    echo "OK, should be on now." 
else 
    echo "Screen is already on." 
    echo "Turning off." 
    adb shell input keyevent 26 # sleep 
fi 
+0

आप अनलॉक करने का सुझाव क्यों दे रहे हैं - जब ओपी डिवाइस को लॉक करना चाहता है? – KurtCobain

+0

आप बिल्कुल सही हैं। मैं किसी भी तरह से इस हिस्से को याद किया। मैंने बाद में आवश्यक बदलाव को दर्शाने के लिए स्क्रिप्ट को बदल दिया है। धन्यवाद @ कर्टकोबेन – Rescue9

+0

टचस्क्रीन मेरे फोन मोटोरोला रेजर पर कमांड नहीं है, इसे "स्वाइप" नहीं होना चाहिए "टचस्क्रीन स्वाइप" – JPM

1

आप प्रदर्शन चालू करने के लिए निम्न आदेश का उपयोग कर सकते हैं। एडीबी शैल इनपुट कीवेंट पावर

मैंने अपनी परियोजना में कोशिश की और उपयोग कर रहा हूं, उम्मीद है कि यह आपके लिए काम करेगा।

adb shell input keyevent 26 स्क्रीन लॉक हो जाएगा:

def ScreenCheck() 
system("adb shell dumpsys power > c:/interact.log") 

File.open("C:\\interact.log").each do |line| 
    if line[/mScreenOn/] 
     if line.strip == "mScreenOn=true" 
      p "Screen is On, Starting execution.." 
     else 
      p "Screen is Off, starting screen.." 
      system("adb shell input keyevent = POWER") 
      p "Starting execution.." 
     end 
    end 
end 
end 
1

से पहले जवाब के अलावा, यहाँ है कि मैं क्या ताला/एडीबी का उपयोग कर अपनी स्क्रीन अनलॉक करने के लिए कैसे करते है:

और यहाँ मैं इस्तेमाल किया गहरे लाल रंग का कोड है।
तो, यदि आप फिर से उस आदेश को निष्पादित करते हैं, जबकि स्क्रीन बंद/बंद हो जाती है, तो इसे चालू/अनलॉक कर दिया जाएगा।
adb shell input keyevent 26 स्क्रीन को अनलॉक भी करेगा (यदि स्क्रीन लॉक है)।

इसके अलावा, मैंने adb shell input keyevent number जैसे सभी आदेशों का भी परीक्षण किया है, और पता चला है कि adb shell input keyevent 3 डिवाइस को अनलॉक भी करता है।

मुझे यह भी पता चला कि परीक्षण 3 है कि होम बटन होम बटन है। इसलिए, यदि आपके पास भौतिक होम बटन है (स्क्रीन पर सॉफ्ट होम बटन नहीं), तो आप इसका उपयोग अपने डिवाइस को अनलॉक करने के लिए भी कर सकते हैं।

0

किसी भी प्री-लॉलीपॉप डिवाइस सहित प्रत्येक कनेक्टेड डिवाइस के लिए स्क्रीन चालू/बंद करने के लिए यहां एक स्क्रिप्ट है। मैं यह सुनिश्चित करने के लिए कि डिवाइस जाने के लिए तैयार हैं, किसी भी जुड़े एंड्रॉइड परीक्षण चलाने से पहले मैं अपने जेनकींस सर्वर पर इसका उपयोग करता हूं। आशा है कि किसी को यह उपयोगी लगेगा!

#!/bin/sh 

# Returns the power state of the screen 1 = on, 0 = off 
getDisplayState() { 
    state=$(adb -s $1 shell dumpsys power | grep mScreenOn= | grep -oE '(true|false)') 

    # If we didn't get anything it might be a pre-lollipop device 
    if [ "$state" = "" ]; then 
     state=$(adb -s $1 shell dumpsys power | grep 'Display Power' | grep -oE '(ON|OFF)') 
    fi 

    if [ "$state" = "ON" ] || [ "$state" = "true" ]; then 
     return 1; 
    else 
     return 0; 
    fi 
} 

echo "Turning on screen on all connected devices..." 

for device in `adb devices | grep device$ | cut -f1` 
do 
    echo -n "Found device: $device ... " 

    getDisplayState $device 
    state=$? 

    # If the display is off, turn it on 
    if [ $state -eq 0 ]; then 
     echo "display was off, turning on" 
     adb -s $device shell input keyevent 26 
    else 
     echo "display was on" 
    fi 

done 
संबंधित मुद्दे