在自定义java react本机模块中调用movetasktoback(),以编程方式将应用程序移动到后台

slwdgvem  于 2021-07-25  发布在  Java
关注(0)|答案(1)|浏览(305)

我正在用java为android编写一个定制的react本机模块,这样我就可以使用back按钮以编程方式将应用程序移到后台。
我正在使用内置的backhandler进行本机响应,但它只提供了一个方法来完全退出应用程序,而不是将应用程序移到后台。
实现后,在我的javascript代码中,我将在此处调用本机模块:

BackHandler.addEventListener('hardwareBackPress', function () {
  /**
   * call native module here
   */
   return true;
  }

建议在android上使用back导航按钮将应用程序移到后面,方法是在 MainActivity 如本文所述。但这将导致应用程序在每次按下后退按钮时总是转到后台。由于我想以编程方式将应用程序移到后台,所以我想创建自己的模块,以便随时调用。
我面临的困难是如何将这种方法从 MainActivity 到自定义模块。
到目前为止,我掌握的代码是:
包裹:

package com.myApp;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;

import java.util.ArrayList;
import java.util.List;

public class MoveAppToBackgroundPackage implements ReactPackage {

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();

        modules.add(new MoveAppToBackground(reactContext));
        return modules;
    }
}

模块:

package com.myApp;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReactContext;

public class MoveAppToBackground extends ReactContextBaseJavaModule {

    @Override
    public String getName() {
        return "MoveAppToBackground";
    }

        private ReactContext mReactContext;

    public MoveAppToBackground(ReactApplicationContext reactContext) {
        super(reactContext);
                mReactContext = reactContext;
    }

    /* React Methods */
   @ReactMethod
    public void MoveToBackground() {
                Activity activity = mReactContext.getCurrentActivity();
                activity.moveTaskToBack(true);
    }
}

主要用途:

...
packages.add(new MoveAppToBackgroundPackage());
...

编译应用程序时遇到的错误是:
moveapptobackgroundpackage不是抽象的,并且不重写抽象方法createviewmanagers(reactapplicationcontext)
我如何创建这个方法,我可以调用一个自定义模块,移动应用程序到后台?

6mw9ycah

6mw9ycah1#

好吧,我通过改变 MoveAppToBackgroundPackage.java 这是:

package com.mtApp

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;

public class MoveAppToBackgroundPackage implements ReactPackage {

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();

        modules.add(new MoveAppToBackground(reactContext));
        return modules;
    }

    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Arrays.asList();
    }
}

相关问题