安卓如何在React Native中没有reactContext的情况下从无头JS任务执行Java代码?
当我的应用程序被终止时,我需要调用以下Java本机模块,这意味着没有react应用程序上下文
是否可以在没有React本机活动的情况下添加此功能
我如何重新编写此代码,以便在收到Firebase Cloud消息后应用程序被终止时调用它
Java代码解锁设备/键盘:
package com.fleeting;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReactContext;
import 安卓.app.Activity;
import 安卓.os.Build;
import 安卓.view.WindowManager;
import 安卓.os.PowerManager;
import 安卓.os.PowerManager.WakeLock;
import 安卓.content.Context;
public class DeviceLock extends ReactContextBaseJavaModule {
@Override
public String getName() {
return "DeviceLock";
}
private ReactContext mReactContext;
private PowerManager.WakeLock sCpuWakeLock;
private Activity activity;
public DeviceLock(ReactApplicationContext reactContext) {
super(reactContext);
mReactContext = reactContext;
}
/* React Methods */
@ReactMethod
public void unlock() {
activity = mReactContext.getCurrentActivity();
PowerManager pm = (PowerManager) mReactContext.getSystemService(Context.POWER_SERVICE);
int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE;
sCpuWakeLock = pm.newWakeLock(flags, activity.getClass().getName());
sCpuWakeLock.acquire();
activity.runOnUiThread(() -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
activity.setShowWhenLocked(true);
activity.setTurnScreenOn(true);
}
activity.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);
});
}
@ReactMethod
public void lock() {
sCpuWakeLock.release();
activity.runOnUiThread(() -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
activity.setShowWhenLocked(false);
activity.setTurnScreenOn(false);
}
activity.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
});
}
}
共 (0) 个答案