在USBdebugging期间如何保持我的屏幕解锁?

Android OS2.2以前在设置/应用程序/开发中有一个选项来禁用USBdebugging期间的屏幕locking。 在升级我的三星Galaxy S到OS2.3.3之后,这个选项消失了,在debugging时保持解锁我的手机非常令人沮丧。

有没有这个选项移动或有另一种方式来做到这一点? (我恨,当有用的选项被无故删除!)

提前致谢…

有多种select,其中许多有可怕的 (主观的)副作用。 我会列出我发现的以及我能想到的副作用。

我很懒,可能和其他很多人一样,我不喜欢留意不必要的事情。 这意味着“哦,我只是在我工作的时候打开这个电源,然后关掉电源”选项并不是一个可行的select。 你忘记它,你最终 遇到下面列出的任何副作用。

TL; DR

带有Debug.isDebuggerConnected() FLAG_KEEP_SCREEN_ONDebug.isDebuggerConnected()充电时保持清醒屏幕超时唤醒locking是不可行的select,如果你只是想debugging。
这个解决scheme也有API 1和wifidebugging的优势!

设置>开发者选项>充电时保持清醒状态

烧伤 :任何人都应该有一个巨大的红旗打开这个。 它说“在充电”而不是“debugging时”。 这意味着,即使您的手机插入主电源,它将保持。 这是特别糟糕的,如果你有一个AMOLED屏幕(例如银河S系列)燃烧的东西。我有这个select了几个星期,现在我有一个永久性的肖像状态栏…

通知 :即使您使用低亮度,并且不要忘记在每次将手机关机时都closures屏幕,但某些应用程序会唤醒您的屏幕,如果只是获得一个简单的通知,导致在大部分时间保持通话状态在。

安全性 :如果你只是在充电的时候让屏幕开着,而且你需要快速的工作,那么第一件事就不会是“啊,让我先locking我的手机”,如果你不小心离开了,你可能会暴露你的脏兮兮的秘密它在。 让我注意到,如果你在一个你不能相信你的学院的环境中工作,我会重新考虑这个就业。

设置>显示>屏幕超时

如果你有很多的应用程序给你通知,这是非常危险的。 特别是如果你有一些垃圾邮件发送者(如果你收到很多邮件的话,那么Facebook,Family Guy甚至是GMail)。

烧伤 :风险也很高。 现在,你甚至不会限制它“在networking上”,所以只要你忘记closures它或者收到通知,它就会一直保持。

电池耗尽 :如果您拿到一个,屏幕将会亮起指定的时间,耗尽您的电池电量。 它会被打开,因为有时你会忘记closures它,或者只是收到通知。

Hotpocket :如果在手机放在口袋里的时候收到通知,屏幕和密闭空间的照明会加热你的口袋,甚至会烧伤。

口袋式拨号 :如果在手机放在口袋里的时候屏幕打开,那么口袋式表盘的危险性会随着每秒增加而增加。 现在,这种情况不太可能,因为手机应用程序通常隐藏得很好,但是我的口袋喜欢经常更改date或者阅读我的电子邮件。

安全性 :假设你在公共场所,手机在桌子上,如果你转身和别人谈话或者快速rest,你的朋友很可能会滥用你的解锁屏幕。 特别是如果他们醉了。 显然,更短的超时减less了这种风险。

使用唤醒锁

权限 :您需要为您的应用程序添加一个可能不必要的android.permission.WAKE_LOCK权限(幸运的是,由于Gradle插件中的Manifest Merger,只能轻松添加debugging变体)。

编码 :您还需要自行pipe理释放锁,可能需要为此创build一个服务。 我想在这里指出,我还没有在Android中使用这个function。

无用的 :它也没有帮助保持屏幕,因为它只保持CPU唤醒。 见文件 。

FLAG_KEEP_SCREEN_ON连接debugging器

如果你阅读这个文档 ,你会发现一个非常接近你的问题。

编码 :唯一的缺点是我可以想到的是,你需要修改一些代码,但是它非常简单(假设你有一个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."); } } } 

要使用它,所有你需要做的就是附加一个debugging器,然后离开应用程序(Home / Tasksbutton或closures屏幕),然后回到它触发onResume

根据你通常debugging的情况,将onCreate放在onCreate可能会比较值得,因为在onResume之前debugging活动生命周期的时候,它会提前注册并希望保持屏幕清醒。

一般来说,我build议在试用代码时使用Run而不是Debug ,只有在发现某些东西时才附加debugging器:这会使您的应用程序加快十倍,并且这个选项是最好的。

试试这个在adbshell,虽然它似乎不能在一些设备上工作:

 svc power stayon usb 

我有Android版本2.3.6,并在settings – > applications – > development有一个选项,保持清醒(即你的屏幕永远不会睡觉),而插入充电。

Jorge Cevallos是对的。

对于Android 4及更高版本:

  1. 进入设置>关于手机
  2. 在“内部编号”上多次触摸(约10次)。
  3. 然后回到Sttings菜单,你会发现“开发人员选项”
  4. 在“开发人员选项”下,你会看到“保持清醒的select”。

玩的开心。

我为此创build了一个应用程序 。 您可以在谷歌search“保持debuggingdebugging”。它只会保持您的手机解锁/屏幕上, 只有当您启用了ADBdebugging。 它不仅限于USB,也可以通过Wi-Fi工作。

我有sampe问题。 我发现这个应用程序保持屏幕解锁时,手机连接。

https://play.google.com/store/apps/details?id=com.gmail.developer.runks.enji

简单。 只需将以下代码添加到您的活动中,只有在您debugging时屏幕才会打开:

 @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 ); } } 

在控制台上

  while true; do adb shell input keyevent mouse ; sleep 1 ; done 
 # 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 

用你的解锁码代替12345。 然后这个shell脚本解锁你的手机:

 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 

您不应该禁用手机上的安全function(如上所述)。 确保没有人可以读取该脚本文件。

您可以将屏幕超时设置为30分钟或将其closures。 该选项位于:设置/显示/屏幕超时

希望能帮助到你。

我有两个select:

  1. 写一个会强制屏幕超时的应用程序非常高。 使用SCREEN_OFF_TIMEOUT或STAY_ON_WHILE_PLUGGED_IN

  2. 如果您的手机已经扎根,并且您正在开发的计算机所在的networking中连接到无线networking,则您可以享受这个带有屏幕超时选项的精彩应用程序: wifi adb 。

我有2个Android 2.3.3的设备,他们都在设置/应用程序/开发中的这个选项,它的所谓的保持醒(屏幕永远不会睡觉,而充电)。 其中之一就是三星Galaxy S

另外我有一个Android 2.2(HTC Desire)的设备,它在同一个位置也有相同的function。

奇怪的是,你不使用自定义ROM?

您可以重新启用开发人员选项,现在隐藏了哪些configuration:

1 – 进入设置>关于>软件信息>更多…

2 – 然后触摸Build号码7次,这会让你倒计时,然后说“你现在是开发者”。

而开发者选项又回来了!

在你的清单中使用这个:

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

而你的屏幕不会closures!