Android 如何在我的应用程序中保持屏幕打开?

Android 如何在我的应用程序中保持屏幕打开?,android,Android,对于我的Android应用程序,我从不希望手机锁定或背光关闭您需要使用它来在应用程序中获得唤醒锁定 您很可能对以下项目感兴趣: 使用PowerManager.WakeLock类执行此操作。 请参阅以下代码: import android.os.PowerManager; public class MyActivity extends Activity { protected PowerManager.WakeLock mWakeLock; /** Called when t

对于我的Android应用程序,我从不希望手机锁定或背光关闭

您需要使用它来在应用程序中获得唤醒锁定

您很可能对以下项目感兴趣:


使用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();
    }
}
在清单文件中使用以下权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />


希望这能解决您的问题…:)

您只需从View类中使用即可。

在onCreate()中的setContentView()之后添加一行代码


getWindow
是一种为活动定义的方法,不需要您首先找到
视图。

这里已经有很多答案了!我用其他可靠的解决方案来回答这个问题:

使用
PowerManager.WakeLock
不是那么可靠的解决方案,因为该应用程序需要额外的权限

<uses-permission android:name="android.permission.WAKE_LOCK" />

秒:

我们可以使用
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);
       }
文件

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" >

文件

注意事项(一些有用的要点):

  • 在主/根/父视图上使用
    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);
    
    如果要删除或终止,请在答案中添加一个“保持屏幕打开”

    getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    你也可以看到

    最好最简单的方法
    。。在活动的布局根目录中使用
    android:keepScreenOn=“true”
    可以做同样的事情,而不需要额外的代码。但它将继续留在州政府


    它可以根据您的需要而变化

    在您希望保持屏幕打开的活动的XML中添加
    android:keepScreenOn=“true”
    ,这是最好的选择。将该行添加到活动的主布局中

    像这样的

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:keepScreenOn="true">
    
    ...
    
    </LinearLayout>
    
    
    ...
    
    此时使用方法

    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\u保持屏幕打开)
    getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

    无需添加权限和使用技巧。只需在主布局中使用以下文本

      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"/>
    

    这不应该出现在
    onreseum
    onPause
    中,这样当用户点击主页按钮时,应用程序就不会一直打开屏幕了吗?此方法已被弃用,您可以参考此处的文档:请删除此已过时的答案。谢谢。@FedericoPonzi案例1:当您只需要屏幕\暗\唤醒\锁定,而不需要屏幕\亮\唤醒\锁定时。案例2:当另一个开发人员的应用程序在前台运行时,你需要屏幕唤醒锁定,而你无法直接获取该应用程序的窗口。这篇文章中有一个更好的解决方案:这个重复的问题有更多的视图,我猜这是因为旧问题使用了强制,但这里保留此答案是每个活动,如果你不想让应用程序唤醒cpu,因为你没有正确地管理唤醒锁,那么你如何关闭这个标志呢?@kilaka使用
    getWindow().clearfags(WindowManager.LayoutParams.flag\u KEEP\u SCREEN\u ON)
    @anthonycr行关闭它。我假设当活动被破坏时,它会自动重置,对吗?@androiddeveloper是的,它将自动重置。请参阅“保持屏幕打开”部分中的注释:与@hackbod的解决方案相同:是的,它应该是正确的答案!我在寻找一个实现“keepScreeOn”的例子(我认为这是实现这一点的最佳方式),这是唯一能很好地说明这一点的答案!无需许可。v.setKeepScreenOn(true);非常适用于MSDK手机,没有检查Ls对第二个解决方案的良好解释,我们没有步骤1和2。仅仅使用步骤2就足够了。效果很好。我还清除了桌面上的标志,这样屏幕状态在我的应用程序之外时会正常运行。出于某种奇怪的原因,它似乎没有这样做就可以工作,但似乎无论如何都是正确的方式,所以请确保我会离开它(也许它在其他手机上的工作方式不同于我的Nexus 5)。已经存在这样的建议/答案他在谈论屏幕(可以用一个标志解决),为什么你建议完全唤醒锁定?
    final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
            this.mWakeLock.acquire();
    
      android:keepScreenOn="true"
    
    class MainActivity extends AppCompactActivity {
        @Override
        protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);    
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
    }
    
    <android:KeepScreenOn="true"/>
    
    public void onDestry() {
        getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }