5

我使用此代码在 Android 4.4.2 上保持屏幕开启。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

该代码确实有效,但一段时间后应用程序崩溃(可能在 24 小时内发生一次)

java.lang.NullPointerException
    at android.os.PowerManager.isScreenOn(PowerManager.java:739)
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:454)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:250)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3028)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3930)
    at android.app.ActivityThread.access$900(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5292)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
    at dalvik.system.NativeStart.main(Native Method)

有解决方案或解决方法吗?这与硬件/软件有关吗?

我发现的唯一有用的线程是: https ://code.google.com/p/android/issues/detail?id=43008

4

3 回答 3

2

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);应该在之前调用setContentView(R.layout.activity_main);

正确的顺序应该是

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.activity_main);

于 2016-06-29T11:22:40.040 回答
1

在我的模拟器中,我通过使用 Google Play 图像创建虚拟设备解决了这个问题。每个 API 级别都有 2 个备选方案。选择 Google Play 之一。

于 2018-07-12T16:48:53.773 回答
0

试试这个方法

爪哇

public class MainActivity extends Activity {
@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
**setContentView(R.layout.activity_main);**
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>

更多信息:保持屏幕开启

于 2016-06-29T11:10:08.993 回答