InAppBrowser:加载url market:// details?id = com.mydomain.myapp时出错

时间:2014-05-13 04:06:05

标签: android cordova phonegap-plugins inappbrowser

我正在使用PhoneGap 3.4和InAppBrowser插件。

当我尝试打开外部网址时,它正在启动浏览器,没有任何问题。

但是当我尝试启动market://网址来评价我的应用时,我收到以下错误:

05-13 04:30:34.527: D/InAppBrowser(2894): InAppBrowser: Error loading url market://details?id=com.mydomain.myapp:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.mydomain.myapp }

我可以看到InAppBrowser.java上有一个函数,如;

 public String openExternal(String url) {
    try {
        Intent intent = null;
        intent = new Intent(Intent.ACTION_VIEW);
        // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
        // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
        Uri uri = Uri.parse(url);
        if ("file".equals(uri.getScheme())) {
            String mimeType = webView.getResourceApi().getMimeType(uri);
            intent.setDataAndType(uri,mimeType);
        } else {
            intent.setData(uri);
        }
        this.cordova.getActivity().startActivity(intent);
        return "";
    } catch (android.content.ActivityNotFoundException e) {
        Log.d(LOG_TAG, "InAppBrowser: Error loading url "+url+":"+ e.toString());
        return e.toString();
    }
}

这段代码看起来不错,但它始终属于catch语句。有没有解决方法呢?

更新:代码在真实设备上运行正常,不适用于模拟器, 这就是原因;

https://stackoverflow.com/a/11073856/929902

2 个答案:

答案 0 :(得分:1)

对于那些没有正确阅读问题的人(比如我),因此没有点击最后的链接:

我遇到的问题是我正在尝试从没有Playstore的模拟器中打开market://链接。

PS:在Cordova 5.1.1和inAppBrowser 0.6.0上测试

答案 1 :(得分:0)

请使用以下CLI添加inappbrowser插件 $ cordova插件添加org.apache.cordova.inappbrowser 并使用以下代码打开inappbrowser

<!DOCTYPE html>
<html>
  <head>
    <title>InAppBrowser.removeEventListener Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Global InAppBrowser reference
    var iabRef = null;

    function iabLoadStart(event) {
        alert(event.type + ' - ' + event.url);
    }

    function iabLoadStop(event) {
        alert(event.type + ' - ' + event.url);
    }

    function iabClose(event) {
         alert(event.type);
         iabRef.removeEventListener('loadstart', iabLoadStart);
         iabRef.removeEventListener('loadstop', iabLoadStop);
         iabRef.removeEventListener('exit', iabClose);
    }

    // Cordova is ready
    //
    function onDeviceReady() {
         iabRef = window.open('http://apache.org', '_blank', 'location=yes');
         iabRef.addEventListener('loadstart', iabLoadStart);
         iabRef.addEventListener('loadstop', iabLoadStop);
         iabRef.addEventListener('exit', iabClose);
    }

    </script>
  </head>
  <body>
  </body>
</html>