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) 个答案