0

这是基于 Metaio sdk,但不确定问题是否依赖于它。我使用 Creator 创建了一个基于 AREL 的基本 Android 应用程序。在检测到标记时,我想在 webview 中加载一个 url。

但是,当检测到标记时,我会看到选择在哪个浏览器中打开 url 的对话框。

如何覆盖它并使其在我的应用程序的 web 视图中打开?

我尝试使用 public boolean shouldOverrideUrlLoading(WebView view, String url) 但它没有被调用。

如何确保我获得了所有试图由 Activity 打开的 url?所以我可以将呼叫定向到 webview..

在我的活动中,我在 onCreate 中有这个:

mWebView = (WebView) findViewById(R.id.webview); mWebView.setWebViewClient(new WebViewHandler());

这在onCreate之外:

类 WebViewHandler 扩展 WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) 
    {
        Log.d("LEE","ping1!!!!!"+url);
        mProgress.setVisibility(View.VISIBLE);
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {
        Log.d("LEE","ping2!!!!!"+url);
        mProgress.setVisibility(View.GONE);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    {
        Log.d("LEE","Triggered url: !!!!!"+url);
    }
}
4

3 回答 3

0

您是否尝试过使用 arel.Media.openWebsite(url, false) 直接在 AREL 中进行操作?

http://dev.junaio.com/arel/documentationArelJS/symbols/arel.Media.html#.openWebsite

您可以直接从创建者编辑 arel 代码

于 2014-03-31T08:15:34.950 回答
0

您的覆盖有错误。你应该false在结束时返回shouldOverrideUrlLoading()。这将允许您的 WebView 处理请求而不是系统。

于 2013-11-19T12:00:29.147 回答
0

我通过像这样在 ARELInterpreterCallback 中覆盖 openWebsite() 来解决它...

//ARELViewActivity.java
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;

    import com.metaio.cloud.plugin.view.WebViewActivity;
    import com.metaio.sdk.ARELActivity;
    import com.metaio.sdk.jni.IARELInterpreterCallback;


    public class ARELViewActivity extends ARELActivity {

        protected ARELInterpreterCallback myARELCallback;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            myARELCallback = new ARELInterpreterCallback();

            if (mARELInterpreter != null)
                mARELInterpreter.registerCallback(myARELCallback);
        }

        @Override
        protected int getGUILayout() {
            return 0;
        }

        class ARELInterpreterCallback extends IARELInterpreterCallback
        {

            @Override
            public void onSDKReady()
            {
                loadARELScene();
            }

            @Override
            public boolean openWebsite(String url, boolean openInExternalApp){

                //url is set with arel.Media.openWebsite("template://item#", false); inside logic.js
                if (url.contains("template://")) {
                    if (url.contains("item1")) {
                        urlSub = url.substring(14, url.length());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Intent i = new Intent(ARELViewActivity.this, WebViewActivity.class);
                                i.putExtra(getPackageName() + ".URL", "http://www.google.com.mx");
                                startActivity(i);
                            }
                        });

                        return true;

                    } else {
                        urlSub = url.substring(14, url.length());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Intent i = new Intent(ARELViewActivity.this, WebViewActivity.class);
                                i.putExtra(getPackageName() + ".URL", "http://www.yahoo.com.mx");
                                startActivity(i);
                            }
                        });

                        return true;
                    }

                } else {
                    return false;
                    //return super.openWebsite(url, openInExternalApp);
                }

            }
        }

    }
于 2015-12-11T22:37:46.490 回答