为什么此React Native软件包可能不适用于8以上的Android版本?

我知道这是一个远景,但除了必须编写自己的本机Java模块外,这似乎是我的视频通话应用程序的唯一选择之一。

当我收到react-native-invoke-app的仅数据Firebase Cloud消息时,我正在使用Headless JS启动我的React Native Android应用。

很长一段时间I couldn't get it working,但发现问题在于该软件包不适用于大于8的Android版本。我现在可以使其与Android 8正常工作。现在的问题是,我显然需要它与较新的版本一起使用,但是还没有Java技能可以自己修复。开发人员似乎已停止更新它。

我无法想象它需要多少才能使其正常运行(猜测),所以我的问题是,是否有任何明显的因素可能会阻止它在高于8的Android版本上运行?我不知道Android版本的详细信息是否足够好,但是对于那些了解更多的人来说,数字可能会更明显。

这是主要的Java包:

package com.codegulp.invokeapp;

import android.app.activityManager;

import android.content.Context;
import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

import java.util.List;

public class RNInvokeApp extends ReactContextBaseJavaModule {

    private static ReactApplicationContext reactContext;
    public static final String LOG_TAG = "RNInvokeApp";
    private static Bundle bundle = null;

    public RNInvokeApp(ReactApplicationContext context) {
        super(context);
        reactContext = context;
    }

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

    @ReactMethod
    public void invokeApp(ReadableMap params) {
        ReadableMap data = params.hasKey("data") ? params.getMap("data") : null;

        if (data != null) {
            bundle = Arguments.toBundle(data);
        }

        String packageName = reactContext.getPackageName();
        Intent launchIntent = reactContext.getPackageManager().getLaunchIntentForPackage(packageName);
        String classname = launchIntent.getcomponent().getclassname();

        try {
            Class<?> activityClass = Class.forName(classname);
            Intent activityIntent = new Intent(reactContext,activityClass);

            activityIntent.addflags(Intent.flaG_actIVITY_SINGLE_TOP);
            reactContext.startactivity(activityIntent);
        } catch(Exception e) {
            Log.e(LOG_TAG,"Class not found",e);
            return;
        }

        if (isAppOnForeground(reactContext)) {
            sendEvent();
        }
    }

    public static void sendEvent() {
        if (bundle != null) {
            reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("appInvoked",Arguments.fromBundle(bundle));
            bundle = null;
        }
    }

    private boolean isAppOnForeground(ReactApplicationContext context) {
        /**
         * We need to check if app is in foreground otherwise the app will crash.
         * http://stackoverflow.com/questions/8489993/check-android-application-is-in-foreground-or-not
         **/
        activityManager activityManager = (activityManager) context.getSystemService(Context.actIVITY_SERVICE);
        List<activityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) {
            return false;
        }
        final String packageName = context.getPackageName();
        for (activityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.importance == activityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
                    && appProcess.processname.equals(packageName)) {
                return true;
            }
        }
        return false;
    }
}

任何关于前进的想法或技巧将不胜感激!

nidi_3 回答:为什么此React Native软件包可能不适用于8以上的Android版本?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3170072.html

大家都在问