【问题标题】:Adding flag to Activity in Java在Java中为Activity添加标志
【发布时间】:2021-07-08 07:41:16
【问题描述】:

我不是 Java 开发人员,但我需要在我的应用程序中实现一些 Android 原生模块,即第三方库。

我调用@ReactMethod 来处理付款。

@ReactMethod
void processPayment(Boolean showTransactionResult, Callback successCallback, Callback errorCallback) {
    Log.d("Message string", String.valueOf("Payment processing started "));
    ReactApplicationContext context = getReactApplicationContext();
    TransactionCallback callback = null; //?
    Activity currentActivity = getCurrentActivity();
    Log.d("Current activity", String.valueOf(currentActivity));
    try {
        makeSale(context, showTransactionResult, callback);
        successCallback.invoke("Callback : payment successful");
    } catch (IllegalViewOperationException e){
        errorCallback.invoke(e.getMessage());
    }
}

这个Java函数应该在应用程序前面打开支付窗口。

void makeSale(ReactApplicationContext context, boolean showTransactionResult, TransactionCallback callback){
    Map<String, String> extras = new HashMap<>();
    extras.put("KEY_1", "Value 1");
    extras.put("KEY_2", "Value 2");
    PaymentSystem.getInstance().makeSale(context, true, extras, new TransactionCallback() {
        @Override
        public void onSuccess(String s, @Nullable @org.jetbrains.annotations.Nullable Map<String, String> map) {
            //Sale successful
            //data is transaction key
            //extras is the Map passed in makeSale()
        }

        @Override
        public void onFailure(PaymentSystemException e, @Nullable @org.jetbrains.annotations.Nullable Map<String, String> map) {
            //Sale failed
        }
    });
}

但我收到此错误消息:

E/unknown:ReactNative: Exception in native call
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    at android.app.ContextImpl.startActivity(ContextImpl.java:1018)
    at android.app.ContextImpl.startActivity(ContextImpl.java:994)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:403)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:403)
    at digital.paynetics.paymentSystem.paymentSystemSdkMock.launchCallbackMockActivity(:5)
    at digital.paynetics.paymentSystem.paymentSystemSdkMock.makeSale(:2)
    at com.myapp.paymentSystemModule.makeSale(paymentSystemModule.java:118)
    at com.myapp.paymentSystemModule.processPayment(paymentSystemModule.java:82)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
    at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
    at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
    at android.os.Looper.loop(Looper.java:223)
    at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
    at java.lang.Thread.run(Thread.java:923)

我在互联网上找到了解决方案,该解决方案可以轻松地将标志添加到 Activity 中的 Intent。但我不知道该怎么做。我想 Intent 是第三方库的一部分。

请帮助我。如果只是一些 Java 问题,抱歉转储问题。

【问题讨论】:

  • 您是否创建了自定义原生类(如 Package 和 Module)来创建自定义原生模块?
  • 是的,模块本身工作正常。这些函数是 PaymentSystemModule 类的一部分,PaymentSystemPackage 注册在 MainApplication 类中。
  • 我已经发布了一个答案,请看看并告诉我它是否有效?

标签: java android react-native module native


【解决方案1】:

尝试使用 getCurrentActivity 而不是 getApplicationContext 来打开新活动。

例如

makeSale(currentActivity, showTransactionResult, callback);

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多