将变量从插件传递回cordova

时间:2017-06-10 10:14:03

标签: javascript android cordova ionic-framework cordova-plugins

我使用Cordova plugin播放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);
}

基本上,当视频无法加载时,我想在我的javascript中将一个变量设置为"错误",例如var video_status = "error",所以我可以稍后使用此信息我的应用。

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

有谁可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

所以我会做这样的事情:

CordovaBridge.java

中创建一个名为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+"'");
            }
        }
  });
}

修改VrVideoActivity.java,如下所示:

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);
}

我还没有测试过上面的代码,但就某种方法而言,它应该为您提供一个基于解决方案的近似值。