有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android的onCreate中使用wakeLock?

我有一个React本机应用程序,当应用程序被关闭且屏幕被锁定时,会收到Firebase云消息。我想关闭键盘保护/解锁设备,并在收到此消息时向用户显示来电界面

我开始通过使用getReactInstanceManager().addReactInstanceEventListener等待React本机应用程序上下文onCreate来实现这一点,然后在获得上下文后,获得一个新的newWakeLock,并调用两个其他方法来尝试唤醒设备,然后解锁屏幕

使用下面的代码,我在Logcat中得到了一些错误。我不确定这是否是一种尝试和实现该功能的好方法,但这是我的出发点

错误是:

E/unknown:ReactNative: ReactInstanceManager.createReactContext: mJSIModulePackage null

E/unknown:ReactNative: ReactInstanceManager.attachRootViewToInstance()

E/unknown:ReactRootView: runApplication: call AppRegistry.runApplication

E/unknown:ReactNative: Unable to launch logbox because react was unable to create the root view

我知道我需要释放唤醒锁

我可以成功获取React上下文,因为我可以在Logcat中的回调中看到日志

需要提及的一点是,当应用程序位于后台且屏幕锁定时,我正在后台消息处理程序中成功地从React Native调用类似的方法来解锁设备。当应用程序被关闭并且屏幕被锁定时,它就不起作用了

现在设备(physical pixel 2 XL)没有响应,但当我手动解锁设备并打开应用程序时,您可以看到JS线程一直在运行,因为应用程序使用React本机路由器即时导航

为什么这不起作用?我是否应该采取不同的方法?TVMIA

主要活动。爪哇:

package com.abc;

import com.facebook.react.ReactActivity;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactApplicationContext;

import 安卓.content.IntentFilter;
import 安卓.os.Build;
import 安卓.os.Bundle;

import 安卓x.annotation.NonNull;
import 安卓x.annotation.Nullable;

import 安卓.util.Log;
import 安卓.view.WindowManager;

import 安卓.view.View;

import com.zoontek.rnbootsplash.RNBootSplash;

import com.facebook.react.bridge.ReactContext;

import 安卓.os.PowerManager;
import 安卓.app.Activity;
import 安卓.content.Context;

public class MainActivity extends ReactActivity  implements ReactInstanceManager.ReactInstanceEventListener{

    @Override
    protected String getMainComponentName() {
        return "abc";
    }

    private ReactContext mReactContext;
    private PowerManager.WakeLock sCpuWakeLock;
    private Activity activity;
    private static final String TAG = "MainActivity";

    public void onReactContextInitialized(ReactContext context) {
        Log.d(TAG, "Here's your valid ReactContext");
        mReactContext = context;
        activity = mReactContext.getCurrentActivity();

        PowerManager pm = (PowerManager) mReactContext.getSystemService(Context.POWER_SERVICE);
        int flags = PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.PARTIAL_WAKE_LOCK;
        sCpuWakeLock = pm.newWakeLock(flags, activity.getClass().getName());
        sCpuWakeLock.acquire();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setShowWhenLocked(true);
            setTurnScreenOn(true);
        }

        getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        RNBootSplash.init(R.drawable.bootsplash, MainActivity.this);

        getReactInstanceManager().addReactInstanceEventListener(this);
    }
}


共 (0) 个答案