Подтвердить что ты не робот

Как я могу разблокировать экран во время отладки USB?

Для Android OS2.2 для параметра "Настройки/Приложения/Разработка" используется опция отключить блокировку экрана во время отладки USB. После обновления моего Samsung Galaxy S до OS2.3.3 эта опция исчезла, и ОЧЕНЬ расстраивать, чтобы разблокировать мой телефон во время отладки.

Была ли эта опция изменена или есть другой способ сделать это? (Я ненавижу, когда полезные опции удаляются без причины!)

Спасибо заранее...

4b9b3361

Ответ 1

Существует несколько вариантов, многие из которых имеют HORRIBLE (субъективные) побочные эффекты. Я расскажу, что я нашел и какие побочные эффекты я мог придумать.

Я ленив, возможно, как и многие другие, и мне не нравится следить за чем-то ненужным. Это означает, что "О, я просто включу это, пока я работаю, а затем выключу, когда закончил" вариант не является жизнеспособным. Вы будете забыть об этом, а будет испытывать любые побочные эффекты, перечисленные ниже.

TL; DR

FLAG_KEEP_SCREEN_ON с Debug.isDebuggerConnected() guard FTW! Не бодрствуйте, когда вы заряжаетесь, тайм-аут экрана и блокировка после пробуждения - это нежизнеспособные параметры, если вы просто хотите отлаживать.
Там также преимущество этого решения работает от API 1 и отладки wifi!

Настройки > Параметры разработчикa > Не бодрствуйте при зарядке

Ожог. Должен быть огромный красный флаг, который включит это. Он говорит "во время зарядки" не "во время отладки". Это означает, что даже если ваш телефон подключен к сети, он будет продолжать работу. Это особенно плохо, если у вас есть экран AMOLED (например, Galaxy S series), который сжигает вещи. У меня была эта опция в течение нескольких недель, и теперь у меня есть постоянная статусная строка...

Уведомления. Даже если вы используете низкую яркость и не забудьте выключить экран каждый раз, когда вы кладете телефон вниз, некоторые приложения разбудят ваш экран, если вы получите простое уведомление, которое ведет чтобы поддерживать его большую часть времени при подключении.

Безопасность. Если вы просто оставите свой экран во время зарядки и вам нужно быстро для чего-то на работе, первое, что не будет "Ах, позвольте мне сначала заблокировать телефон" и вы можете разоблачить свои грязные секреты, если вы случайно оставите его. Позвольте мне заметить, что если вы работаете в среде, где вы не можете доверять своим коллегам, я бы пересмотрел эту работу.

Настройки > Дисплей > Тайм-аут экрана

Это очень рискованно, если у вас много приложений, которые предоставляют вам уведомления. Особенно, если у вас есть спамеры (Facebook, Family Guy или даже GMail, если вы получаете много писем).

Запись в: риск тоже высок. Теперь вы даже не ограничиваете его "находясь на проводе", чтобы он оставался на месте, когда вы забываете отключить его или получить уведомление.

Слив батареи. Если вы получите один экран, он будет включен в течение указанного количества времени, разрядив батарею. И это произойдет, потому что иногда вы забываете отключить его или просто получать уведомление.

Hotpocket: если вы получаете уведомление, когда телефон находится в кармане, подсветка с экрана и ограниченное пространство нагревают ваши карманы, и вы даже можете сожжены.

Карманный циферблат: если ваш экран включается, когда телефон находится в кармане, риск появления карманного набора увеличивается с каждой секундой. В настоящее время это менее вероятно, потому что приложение для телефона обычно хорошо скрыто, но мой карман любит часто менять дату или читать мои письма.

Безопасность: представьте, что вы находитесь в общественном месте, а ваш телефон находится на столе, ваши друзья, скорее всего, будут злоупотреблять вашим разблокированным экраном, если вы обходитесь достаточно долго, чтобы поговорить с кем-то или принять быстрый перерыв. Особенно, если они опьянены. Очевидно, что более короткие таймауты уменьшают этот риск.

Использование блокировки слежения

Разрешение. Вам нужно добавить необязательное разрешение android.permission.WAKE_LOCK для вашего приложения (к счастью, легко добавлять только варианты отладки благодаря слиянию манифеста в плагине Gradle).

Кодирование. Вам также потребуется управлять выпуском блокировки самостоятельно и, возможно, вам нужно создать Сервис только для этого. Я хотел бы отметить здесь, что я еще не использовал эту функцию в Android.

Бесполезный. Он также не помогает поддерживать экран, так как он просто заставляет процессор бодрствовать. См. документация.

FLAG_KEEP_SCREEN_ON, в то время как отладчик подключен

Если вы читаете документацию для этого, вы найдете очень близкое приближение к своей проблеме.

Кодировка: только ниже, я могу придумать, что вам нужно изменить какой-то код, но он очень прост (если у вас есть BaseActivity, что все ваши другие действия расширяются):

@Override protected void onResume() {
    super.onResume();
    if (BuildConfig.DEBUG) { // don't even consider it otherwise
        if (Debug.isDebuggerConnected()) {
            Log.d("SCREEN", "Keeping screen on for debugging, detach debugger and force an onResume to turn it off.");
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        } else {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            Log.d("SCREEN", "Keeping screen on for debugging is now deactivated.");
        }
    }
}

Чтобы использовать его все, что вам нужно сделать, это подключить отладчик, а затем оставить приложение (Главная/Задачи или выключить экран), а затем вернуться к нему, чтобы вызвать onResume.

В зависимости от того, что вы обычно отлаживаете, может быть стоит поставить выше в onCreate, чтобы он регистрировался ранее и, надеюсь, держит экран активным во время отладки жизненного цикла операции до onResume.

В общем, я рекомендую использовать Run вместо Debug при попытке кода и присоединять отладчик только при обнаружении чего-то: это сделает ваше приложение в десять раз быстрее, и этот вариант лучше всего.

Ответ 2

Попробуйте это в оболочке adb, хотя на некоторых устройствах оно не работает:

svc power stayon usb

Ответ 3

У меня Android версии 2.3.6, а под settingsapplicationsdevelopment есть возможность не спать (т.е. ваш экран никогда не будет спать), пока он подключен к зарядке.

Ответ 4

Хорхе Чеваллос прав.

Для Android 4 и выше:

  • Перейдите в Настройки > О телефоне
  • Несколько раз (примерно 10 раз) коснитесь "Строить номер".
  • Затем вернитесь в меню Sttings, и вы найдете "Параметры разработчика"
  • В разделе "Параметры разработчика" вы увидите вариант "оставаться в режиме ожидания".

Удачи.

Ответ 5

Для этого я создал приложение. Вы можете найти его в Google Play "Keep Awake for Debugging". Он будет разблокирован/включен на экране только, когда у вас включена отладка ADB. Он не ограничивается только USB, он также работает через Wi-Fi.

Ответ 6

На консоли

 while true; do adb shell input keyevent mouse ; sleep 1 ; done

Ответ 8

Simple. Просто добавьте следующий код в свою деятельность, и ваш экран включится ТОЛЬКО при отладке:

@Override
protected void onResume()
{
    Log.d( tag, "onResume()" );
    try
    {
        super.onResume();
        if( BuildConfig.DEBUG && Debug.isDebuggerConnected() )
        {
            Log.d("SCREEN", "Keeping screen on for debugging, detach debugger and force an onResume to turn it off.");
            getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                                  WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                                  WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                                  WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
                                  WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON );
        }
        else
        {
            getWindow().clearFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
                                    WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON );
            Log.d( "SCREEN", "Keeping screen on for debugging is now deactivated.");
        }

    }
    catch( Throwable t )
    {
        Log.e( tag, "onResume() - Exception: " + t.getMessage(), t );
    }
}

Ответ 9

Замените 12345 кодом разблокировки. Затем эта оболочка script разблокирует ваш телефон:

adb shell input keyevent KEYCODE_WAKEUP # activate 
adb shell input touchscreen swipe 530 1420 530 1120 # swipe up
adb shell input text 12345 # input password
adb shell input keyevent 66 # press enter

Вы никогда не должны отключать функции безопасности на своем телефоне (как указано выше). Убедитесь, что никто не может прочитать этот файл script.

Ответ 10

# find out if screen is on works on android 5.0+
screenOn=`adb shell dumpsys power | grep "Display Power" | grep ON`
if [ -z "$screenOn" ]; then
    echo "turning screen on"
    adb shell input keyevent KEYCODE_POWER
    # unlock by emulating slide up
    adb shell input touchscreen swipe 930 880 930 380
fi

Ответ 11

Скажите PowerManager, чтобы экран оставался включенным (он по-прежнему тусклый):

adb shell settings put global stay_on_while_plugged_in 3

Значение 3 - это следующие два типа, которые OR вместе:

BatteryManager#BATTERY_PLUGGED_AC и BatteryManager#BATTERY_PLUGGED_USB.

Использование adb shell dumpsys power | grep mStayOnWhilePluggedInSetting adb shell dumpsys power | grep mStayOnWhilePluggedInSetting чтобы увидеть текущее значение.

Чтобы вернуться к нормальному поведению, установите значение в ноль примерно так:

adb shell settings put global stay_on_while_plugged_in 0

Проверено работает на Android 4.4 через 9.0.

Ответ 12

Улучшение лучшего ответа:

Debug.isDebuggerConnected() недостаточно, если вы сейчас не отлаживаете, но продолжаете работать с приложением, пока устройство подключено через ADB к Android studio. Затем мы должны добавить проверку ADB Enabled.

Settings.Global.getInt(contentResolver, Settings.Global.ADB_ENABLED, 0) == 1, где 1 - это когда ADB включен

@Override protected void onResume() {
    super.onResume();
    if (BuildConfig.DEBUG) { // don't even consider it otherwise
        if (Debug.isDebuggerConnected() ||
            Settings.Global.getInt(getContentResolver(), Settings.Global.ADB_ENABLED, 0) == 1) {
            Log.d("SCREEN", "Keeping screen on for debugging, detach debugger and force an onResume to turn it off.");
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        } else {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            Log.d("SCREEN", "Keeping screen on for debugging is now deactivated.");
        }
    }
}

Ответ 13

Вы можете просто установить время ожидания экрана до 30 минут или отключить его. Этот параметр находится в разделе: Настройки/Экран/Тайм-аут экрана

Надеюсь, что это поможет.

Ответ 14

Мне приходят в голову два варианта:

  • напишите приложение, которое заставит тайм-аут экрана быть очень высоким. Используйте SCREEN_OFF_TIMEOUT или STAY_ON_WHILE_PLUGGED_IN.

  • Если ваш телефон укоренен и вы подключены к Wi-Fi в той же сети, что и компьютер, на котором вы разрабатываете, вы можете наслаждаться этим замечательным приложением, которое поставляется с опцией тайм-аута экрана: wifi adb.

Ответ 15

У меня есть 2 устройства с Android 2.3.3, и они оба имеют этот параметр в настройках/приложениях/разработке и называются Stay Awake (экран никогда не будет спать во время зарядки). И один из них - Samsung Galaxy S.

Кроме того, у меня есть устройство с Android 2.2 (HTC Desire), оно имеет ту же функциональность в том же месте.

Странно, что у вас этого нет, вы используете пользовательский ПЗУ?

Ответ 16

Вы можете повторно включить опции разработчика, какие конфигурации теперь скрыты:

1 - Перейдите в Настройки > О программе > Информация о программном обеспечении > Подробнее...

2 - Затем коснитесь строкового номера 7 раз, что даст вам отсчет вниз, а затем скажет: "Теперь вы разработчик".

И параметры разработчика вернулись!

Ответ 17

Используйте это в своем манифесте:

<uses-permission android:name="android.permission.WAKE_LOCK" />

и ваш экран не отключится!