1、使用PowerManager.wakeLock进行设置
public class WakeLockActivity extends Activity { PowerManager powerManager = null; WakeLock wakeLock = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); this.powerManager = (PowerManager) this .getSystemService(Context.POWER_SERVICE); this.wakeLock = this.powerManager.newWakeLock( PowerManager.FULL_WAKE_LOCK, "My Lock"); } @Override protected void onResume() { super.onResume();
//设置背光不熄灭 this.wakeLock.acquire(); } @Override protected void onPause() { super.onPause();
//释放背光锁,运行背光熄灭 this.wakeLock.release(); } }
需要添加的权限
<uses-permission android:name="android.permission.WAKE_LOCK"> </uses-permission>
2、为窗口添加flag:3、修改framewokgetWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
或者
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
可以找到R.integer.def_screen_off_timeout的定义。
<integer name="def_screen_off_timeout">60000</integer>
发现默认值为60000ms,也就是60s。我们只需要把这个参数改为-1。然后重新编译SettingsProvider模块,就OK了。
另外为了防止用户进入系统后,修改锁屏时间,在Setting模块中删除对锁屏时间的设置。这样Android设备就永不锁屏了。
锁屏的代码在LockScreen.java中,可以设置锁屏功能开关的位置。代码位于:frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java
该文件中有一个变量定义如下:
/**
* External apps (like the phone app) can tell us to disable the keygaurd.
*/
private boolean mExternallyEnabled = true;
mExternallyEnabled是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个值。但是经过加打印信息发现开机的时候没有任何应用程序会修改它。修改这个值调用如下函数:
public void setKeyguardEnabled(boolean enabled)
经过上面的讨论我们可以发现我们有两个解决方法:
(1)定义变量的时候,给其初始化为false。
(2)调用方法KeyguardEnabled(false);
4.在famework中设置选项,修改Settings.Global.STAY_ON_WHILE_PLUGGED_IN的值
Settings.Global.putInt(getActivity().getContentResolver(),
Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
mKeepScreenOn.isChecked() ?
(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);