Javascript 将变量从插件传递回cordova

Javascript 将变量从插件传递回cordova,javascript,android,cordova,ionic-framework,cordova-plugins,Javascript,Android,Cordova,Ionic Framework,Cordova Plugins,我正在使用的播放一个VR视频文件,通过GoogleVRPlayer.playVideo(videoUrl,fallbackVideoUrl)调用 在插件的.java文件中,有: @Override public void onLoadError(String errorMessage) { // I want to know if this function is executed Log.e(TAG, "Error loading video: " + errorMessage); }

我正在使用的播放一个VR视频文件,通过
GoogleVRPlayer.playVideo(videoUrl,fallbackVideoUrl)
调用

在插件的.java文件中,有:

@Override
public void onLoadError(String errorMessage) {
  // I want to know if this function is executed
  Log.e(TAG, "Error loading video: " + errorMessage);
}
基本上,当视频加载失败时,我想在cordova中的javascript中将一个变量设置为“error”,例如
var video\u status=“error”
,以便稍后在我的应用程序中使用此信息

我已经找到了一些可能解决我的问题的答案,但我似乎无法以正确的方式整合它。我对本机插件和Java几乎没有经验


有谁能帮我吗?

因为Cordova插件
GoogleVRPlayer
启动了一个新的活动(
VrVideoActivity
),我会使用Singleton类作为两个活动之间的中间数据桥来保存错误消息。 这是因为,在启动视频播放器活动时,您的应用程序(Cordova活动)会在后台暂停,并且只有在视频播放器活动关闭后才会恢复执行。 通过使用中间类,Cordova插件和视频活动都可以共享数据

所以我会这样做:

cordova vr player/src/android/java/neotrino/

package com.neotrino;

public class CordovaBridge {
  private String errorMsg = null;
  public String getErrorMsg() {return errorMsg;}
  public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}

  private static final CordovaBridge holder = new CordovaBridge();
  public static CordovaBridge getInstance() {return holder;}
}
修改
GoogleVRPlayer.java
如下:

import com.neotrino.CordovaBridge;

@Override
public void onResume(boolean multitasking) {
    cordova.getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            String errorMsg = CordovaBridge.getInstance().getErrorMsg();
            if(errorMsg != null){
              webView.loadUrl("javascript:window.video_status = '"+errorMsg+"'");
            }
        }
  });
}
import com.neotrino.CordovaBridge;

@Override
public void onLoadError(String errorMessage) {
  // I want to know if this function is executed
  Log.e(TAG, "Error loading video: " + errorMessage);
  CordovaBridge.getInstance().setErrorMsg(errorMessage);
}
修改
VrVideoActivity.java
如下:

import com.neotrino.CordovaBridge;

@Override
public void onResume(boolean multitasking) {
    cordova.getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            String errorMsg = CordovaBridge.getInstance().getErrorMsg();
            if(errorMsg != null){
              webView.loadUrl("javascript:window.video_status = '"+errorMsg+"'");
            }
        }
  });
}
import com.neotrino.CordovaBridge;

@Override
public void onLoadError(String errorMessage) {
  // I want to know if this function is executed
  Log.e(TAG, "Error loading video: " + errorMessage);
  CordovaBridge.getInstance().setErrorMsg(errorMessage);
}

我尚未测试上述代码,但就方法而言,它应该为您提供一个近似值,您可以根据该近似值来制定解决方案。

谢谢您的建议。我在尝试构建项目时遇到以下错误:
错误:找不到符号webView.loadUrl(“javascript:window.video_status='error'”;symbol:variable webView
错误:找不到symbol cordova.getActivity().runOnUiThread(new Runnable()){symbol:variable cordova
我的原始解决方案假设插件在cordova活动中执行-查看了插件的源代码后,它实际上使用了一个单独的活动,这会使您如何将错误消息传回cordova应用程序变得复杂。我已相应地更新了我的答案。感谢您的支持您的编辑!我现在收到一个生成错误:
找不到symbol import com.neotrino.CordovaBridge;^symbol:class CordovaBridge
用于这两个.java文件…您需要将CordovaBridge.java作为源文件插入plugin.xml中。请注意,这不是对插件的简单编辑。我理解。可能是这样在plugin.xml中注入源文件后出现新的构建错误:
error:找不到符号cordova接口cordova=CordovaBridge.getInstance().setErrorMsg(errorMessage)^symbol:class Cordova接口位置:class VrVideoActivity.ActivityEventListener