我如何将屏幕保持在我的应用程序?
对于我的Android应用程序,我不希望手机locking或背光closures
使用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" />
希望这会解决你的问题… 🙂
在onCreate()的setContentView()之后添加一行代码
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_flag); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
这里已经有很多答案了! 我用更多可靠的解决scheme来回答这个问题:
使用PowerManager.WakeLock
不是一个可靠的解决scheme,因为应用程序需要额外的权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
而且,如果意外地保持了唤醒locking,它可以离开屏幕。
所以,我build议不要使用PowerManager.WakeLock
解决scheme。 而不是这个,使用以下任何解决scheme:
第一:
我们可以使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
在onCreate()
@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); 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" >
Google文件http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn
注意事项(一些有用的观点):
- 在主/根/父视图上使用
keepScreenOn
并不重要。 它可以与任何子视图一起使用,并且将以与父视图相同的方式工作。 - 唯一重要的是视图的可见性必须可见。 否则,它将无法正常工作!
不要使用唤醒锁。
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);
你也可以在这里看到..
the best and easiest way
。在活动的布局根目录中使用android:keepScreenOn="true"
在没有额外的代码的情况下做同样的事情。 但它将保持在Keep_Scree_on状态。
它可以根据您的需求而变化请参阅此处
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow
是为活动定义的方法,并不会要求您先查找View
。
看看这个讨论力量屏幕上
hackbod有一个很好的答案。
您可以简单地使用View类中的setKeepScreenOn()
。
在要保持屏幕的活动的XML中添加android:keepScreenOn="true"
是最佳select。 将该行添加到活动的主要布局。
像这样的东西
<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>
您需要使用电源pipe理器来获取应用程序中的唤醒锁。
很可能你对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();
在这一点上的方法
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);
试试这个我们可以在多个方面做到这一点
解决方法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"/>
我的build议是请不要使用WakeLock,如果你使用这个,你将会定义额外的权限,而且这个东西大多在cpu的开发环境中很有用。
并确保closures活动时closures屏幕
你可以这样做
pubic void onDestry(){ 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);
没有必要添加权限和做技巧。 在主布局中使用下面的文本。
android:keepScreenOn="true"
- 在Android中如何调用getContentResolver()?
- 如何在AndroidStudio中设置Java SDKpath?
- Android Studio呈现问题
- strings.xml中的错误:invalid symbol'continue'
- 当Realm在NotificationListenerService中更新时,RealmChangeListener不会被调用
- 以编程方式设置可绘制的大小
- 在Android上创build新项目,错误:Studio未知主机'services.gradle.org'
- 在Android L.上运行本机库错误:仅支持与位置无关的可执行文件(PIE)
- 检查Android应用程序是否在后台运行