在 Android 和 iOS 本地使用 krpano 的问题

Posted

技术标签:

【中文标题】在 Android 和 iOS 本地使用 krpano 的问题【英文标题】:Problems using krpano locally in Android and iOS 【发布时间】:2014-02-07 15:40:54 【问题描述】:

我用 krpano 创建了几张全景图,我正在开发一个显示它们的移动应用程序 (ios + android)。

如果我从服务器在线访问 krpano 文件,一切正常,但是当我将文件包含为应用程序资源并尝试在本地访问它们时,我无法使其正常工作。我发现的错误如下:

iOS 应用:黑屏。

Android 应用:黑屏和错误消息:“FATAL ERROR: my_pano.xml - loading failed (network error: a network error occurred).

我做了很多测试:只有 krpano 文件加载失败;其他本地html+js文件在本地加载没有问题。

什么会阻止 krpano 文件在本地加载?

在 Android 中,我使用 WebView 对象来加载全景图,并且从在线 url 可以正常工作,但不能在本地工作。

这是我在 Android 上的代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView myWebView = (WebView) findViewById(R.id.webview);

        //para no salir de mi webview al pinchar
        //y cargar una pantalla SPLASH mientras carga la web
        myWebView.setWebViewClient(new WebViewClient()
                       
        );


        WebSettings webSettings = myWebView.getSettings();
        webSettings.setjavascriptEnabled(true); //activa javascript
        webSettings.setBlockNetworkLoads(false); //para que no de bloqueos de red
        webSettings.setDomStorageEnabled(true); //recomiendan poner tb esto


        //no está funcionando la carga de la web desde local
        myWebView.loadUrl("file:///android_asset/asuncion.html");
        // myWebView.loadUrl("http://coolab.umh.es/360/alcudia/alcudia.html"); 


    

我收到以下错误:

但是我可以从 Eclipse 中看到全景:

非常欢迎任何建议!

【问题讨论】:

对于安卓你可以尝试MozillaView而不是WebView来克服WebView的限制。 这有什么结果吗? 【参考方案1】:

沉迷于 ilovebali 所说的,您可以尝试 CrossWalk(Android 默认 webview 的替代方案),在我看来,这本身就是一个很好的解决方案对于这种事情。 以下是显示您所询问内容的代码示例:

    xWalkView = (XWalkView) this.findViewById(R.id.your_xwalk_webview);
    xWalkView.load(filePath, null);

    XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
    XWalkPreferences.setValue(XWalkPreferences.ALLOW_UNIVERSAL_ACCESS_FROM_FILE, true);
    XWalkPreferences.setValue(XWalkPreferences.JAVASCRIPT_CAN_OPEN_WINDOW, true);

如果需要更多信息,请查看此链接:https://diego.org/2015/01/07/embedding-crosswalk-in-android-studio/

【讨论】:

【参考方案2】:

我怀疑问题出在 WebView 可能使用的原生 android 浏览器上。 原生 android 浏览器和 chrome 都不会让网站在本地访问 xml 文件。

我没有尝试将 krpano 封装到 WebView 中。但只是将文件复制到设备上并尝试使用本机浏览器打开它。我找到了这个错误。

我能够在 Android 设备上查看 krpano 全景图的唯一方法是安装 Firefox 或 Dolphin 浏览器并在该浏览器中查看本地页面。

希望这至少会有所帮助。

【讨论】:

【参考方案3】:

尝试将此代码添加到您的活动中,我使用下面的代码来处理 CORS(跨源请求)

  myWebView.getSettings().setAllowFileAccess(true);
  myWebView.getSettings().setAllowContentAccess(true);
  myWebView.getSettings().setAllowFileAccessFromFileURLs(true);
  myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);

希望对您有所帮助...

【讨论】:

【参考方案4】:

您可以使用 KRPano 或 PanaromaGl 库来实现相同的目的。

以下链接结帐:

http://krpano.com/

https://github.com/anispy211/PanaromaGL

【讨论】:

请避免仅链接的答案。有关详细信息,请参阅帮助部分。

以上是关于在 Android 和 iOS 本地使用 krpano 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin - 无法通过 Android(和 iOS)访问本地 api

2020 年使用 cordova 的本地数据库 [Android/IOS]

科尔多瓦本地通知声音在 ios 和 Android 中不起作用

Android 和 iOS 上的本地存储有多持久?

Cordova Local Notification 为 iOS 和 Android 播放本地声音

解析本地数据存储以替代 Core Data (iOS) 和 SQLite (Android)