Javascript 将变量从插件传递回cordova
我正在使用的播放一个VR视频文件,通过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); }
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