如何将屏幕保持在我的应用程序中?
使用PowerManager.WakeLock类序执行此。 请看下面的代码:
import android.os.PowerManager;
public class MyActivity extends Activity {
protected PowerManager.WakeLock mWakeLock;
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle icicle) {
setContentView(R.layout.main);
/* This code together with the one in onDestroy()
* will make the screen be always on until this Activity gets destroyed. */
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
}
@Override
public void onDestroy() {
this.mWakeLock.release();
super.onDestroy();
}
}
使用清单文件的follwing权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
希望这将解决您的问题... :)
不应该在'onResuem'和'onPause'这样的应用程序不会保持屏幕当用户点击主页按钮? – 2011-09-23 03:29:50
PowerManager pm是否必须声明为final? – 2012-10-31 00:53:22
对于@SethHikari提出的问题不太好的建议。太多的工作,消耗太多的CPU功耗。 – Ewoks 2013-06-19 13:18:18
您需要使用Power Manager才能在应用程序中获取唤醒锁。
最可能的是你有兴趣在一个FULL_WAKE_LOCK:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
....
wl.release();
添加的setContentView()中的onCreate(后)一行代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flag);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow
是活动定义的方法,而不会要求你找到一个View
第一。
与@ hackbod的解决方案相同:http://stackoverflow.com/a/2134602/435605 – 2013-12-29 13:16:18
谢谢@kilaka :) – 2013-12-30 05:13:54
很多答案已经存在!我正在用附加的和可靠的解决方案回答这个问题:
使用PowerManager.WakeLock
不是一个可靠的解决方案,因为该应用程序需要额外的权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
此外,如果它意外地保持唤醒锁,它可以离开屏幕。
因此,我建议不要使用PowerManager.WakeLock
解决方案。取而代之的是,使用任何以下解决方案:
第一:
我们可以在onCreate()
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
第二次使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
:
我们可以使用keepScreenOn
1。实施Java代码使用setKeepScreenOn()
:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
View v = getLayoutInflater().inflate(R.layout.driver_home, null);// or any View (incase generated programmatically)
v.setKeepScreenOn(true);
setContentView(v);
}
文档http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)
2.添加keepScreenOn
到XML布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true" >
http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn文档
注释(一些有用的点S):
- 这不要紧,
keepScreenOn
应该在主/根/父视图中使用。它可以与任何子视图一起使用,并且将以与父视图相同的方式工作。 - 唯一重要的是视图的可见性必须可见。否则,它不会工作!
是的,它应该是正确的答案!我正在寻找一个实施“keepScreeOn”(我认为这是实现这个目标的最佳方法)的例子,这是唯一能够很好地展示它的答案! – 2014-01-23 19:29:51
不需要该权限。 – mhdjazmati 2017-01-11 14:10:53
v.setKeepScreenOn(true);精彩的M sdk手机上的作品,没有检查Ls的' – CodeToLife 2017-02-12 16:05:56
请勿使用唤醒锁。
It requires permission and other stuff and may cause error if you forget to set it in right time.
最简单的方法是,当你要保持你的屏幕上使用下面的代码..
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
任一方式,如果你想删除或终止keep_Screen_on
答案getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
你还可以看到here ..
和the best and easiest way
..在活动的布局根目录中使用android:keepScreenOn="true"
可以在没有额外代码的情况下执行相同的操作。但是,它仍将它Keep_Scree_on国..
它可以在你的需求See here
工程很棒。我还清除了onStop中的标志,因此屏幕上的状态在我的应用程序外部像往常一样运行。出于某种奇怪的原因,它似乎没有这样做,但似乎是正确的方式来做它无论如何,以确保我会离开它(也许它不同于其他手机比我的Nexus 5)。 – riper 2015-01-06 14:39:26
在你想保留在屏幕上是最好的选择活动(一个或多个)的XML添加android:keepScreenOn="true"
被改变。将该行添加到活动的主布局。
像这样的事情
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
...
</LinearLayout>
适合我,thx。 – 2015-12-03 18:51:22
此时方法
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
已被弃用。
您应该使用 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
和getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
<uses-permission android:name="android.permission.WAKE_LOCK" />
必须有,如果你想将其设置为
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我测试过了,但是权限不是必需的。 – 2015-06-19 07:44:09
你是完全正确的,我的错误忘记清理/重建项目,同时测试... – Proxytype 2015-06-19 21:22:01
无需添加权限和做花样。只需在主布局中使用以下文本即可。
android:keepScreenOn="true"
尝试这个我们可以做到多种方式在那些
解决方法1:
class MainActivity extends AppCompactActivity{
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
溶液2:
在activity_main.xml中文件只需添加
<android:KeepScreenOn="true"/>
我的建议是请不要使用WakeLock,如果你使用这个,你将会定义额外的许可 ,而且这个东西大多在cpu的开发环境中很有用。
,并确保在关闭活动
关闭屏幕,您可以通过这种方式
pubic void onDestry(){
getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
有这样的建议/答案已经存在 – user7294900 2017-07-23 06:39:28
有在这个岗位更好的解决方案做到这一点: 的http://计算器。 com/questions/4807634/disable-keep-screen-on – Derzu 2012-02-25 05:01:20
http://stackoverflow.com/a/16015358/1318946 – 2013-09-11 13:32:05