lac*_*ton 3 android android-activity
问题我的Android自动化测试不可靠,因为测试的活动有时会运行并且有时会暂停.
原因如果我的Android设备(三星Galaxy S2)启用了锁屏,则所有活动都会立即进入暂停模式.
如何在我的测试运行时以编程方式禁用锁定屏幕?
这是我尝试过的,根本没有产生任何结果(即,锁定屏幕仍处于活动状态并暂停我的活动).
添加android.permission.DISABLE_KEYGUARD权限并KeyguardLock.disableKeyguard()按照android doc中的说明使用.
设置窗口标志:FLAG_SHOW_WHEN_LOCKED,FLAG_TURN_SCREEN_ON,FLAG_DISMISS_KEYGUARD.
使用WakeLock.acquire()带PowerManager.FULL_WAKE_LOCK,PowerManager.ACQUIRE_CAUSES_WAKEUP,PowerManager.ON_AFTER_RELEASE和PowerManager.SCREEN_BRIGHT_WAKE_LOCK参数.
adb shell input keyevent 82
小智 5
您可以使用以下代码禁用锁定屏幕.在您的活动的oncreate中包含此代码.
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "INFO");
wl.acquire();
KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
kl = km.newKeyguardLock("name");
kl.disableKeyguard();
Run Code Online (Sandbox Code Playgroud)
在清单包含权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Run Code Online (Sandbox Code Playgroud)
小智 5
android:keepScreenOn='true'
Run Code Online (Sandbox Code Playgroud)
像这样在 rootView 中使用这个属性
<LinearLayout
xmlns:android=`http://schemas.android.com/apk/res/android`
xmlns:app=`http://schemas.android.com/apk/res-auto`
android:layout_width=`match_parent`
android:layout_height=`match_parent`
android:keepScreenOn="true">
Run Code Online (Sandbox Code Playgroud)
在科特林,
对于Api 级别 28或更低,您只需在需要打开的活动中添加以下方法:
override fun onAttachedToWindow() {
super.onAttachedToWindow()
toBeShownOnLockScreen()
}
private fun toBeShownOnLockScreen() {
window.addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setTurnScreenOn(true)
setShowWhenLocked(true)
} else {
window.addFlags(
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
)
}
}
Run Code Online (Sandbox Code Playgroud)
为了让它在Android Pie 及更高版本上运行,除了上面的步骤,我们还需要在 AndroidManifest 中设置:
<activity
android:name=".view.activity.LockScreenActivity"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:turnScreenOn="true" />
Run Code Online (Sandbox Code Playgroud)
我已经从 Api 级别 21 到 29 测试了这段代码,并且效果很好!
更新:如果toBeShownOnLockScreen()在onAttachedToWindow(). 因此,您只需toBeShownOnLockScreen()在onCreate()Activity内部调用即可。就是这样。
| 归档时间: |
|
| 查看次数: |
22756 次 |
| 最近记录: |