我是Android开发的新手。我有方法在浮动小部件中使用开关控件来保持屏幕。
public void onSwitchClick(View view) {
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) { // The switch is enabled
//int flag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
//mLayoutParams.flags=flag;
//mWindowManager.updateViewLayout(mFloatingWidgetView.getRootView(), mLayoutParams);
//getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Toast.makeText(getApplicationContext(), "ON",
Toast.LENGTH_SHORT).show();
} else { // The switch is disabled
Toast.makeText(getApplicationContext(), "OFF",
Toast.LENGTH_SHORT).show();
}
}
});
}
当用户点击开关时,它应该保持屏幕开启。我已经经历了许多关于WakeLock,Flags的答案,但没有解决方案对我有用。当我按下开关时,应用程序崩溃了。请注意,此方法在服务中,并且Toast消息正常工作。非常感谢您的帮助。
以下代码段不提供任何编译错误,但在运行时不起作用。
int flag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
mLayoutParams.flags=flag;
mWindowManager.updateViewLayout(mFloatingWidgetView.getRootView(), mLayoutParams);
答案 0 :(得分:1)
您应该只在有时只在屏幕上的活动中使用FLAG_KEEP_SCREEN_ON
。相反,您需要使用WakeLock
来保持屏幕亮度达到全亮或部分亮度。
首先,您需要声明权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
然后,您需要使用WakeLock
获取PowerManager
,并确保发布。释放WakeLock
意味着您不会不必要地杀死用户的电池。
WakeLock mScreenWakeLock = null;
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
mScreenWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
"widget-screen-wakelock");
// You only want one WakeLock to deal with.
mScreenWakeLock.setReferenceCounted(false);
// Grab the WakeLock and make sure the screen stays on
mScreenWakeLock.acquire();
然后,当你不再需要它时,你可以释放它:
mScreenWakeLock.release()
请注意,您可能希望为可以保留WakeLock
的时间量添加限制,这样您就不会永久保留它,尤其是在您创建浮动小部件时。您可以通过将最大毫秒数传递给acquire方法来实现:
// Hold WakeLock for upto 1 hour.
mScreenWakeLock.acquire(3600000);
您可以使用WakeLocks
查看您的应用使用的adb
:
adb shell dumpsys power | grep -i "package.name"