Android metaio AREL在app中启动url而不是外部浏览器

时间:2013-11-19 11:47:36

标签: android webview arel metaio

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

但是当检测到标记时,我会看到选择打开网址的浏览器的对话框。

如何覆盖它并在我的应用中的webview中打开它?

我尝试使用公共布尔值shouldOverrideUrlLoading(WebView视图,字符串网址),但它没有被调用。

如何确保获取活动尝试打开的所有网址?所以我可以将调用定向到webview ..

在我的活动中,我将其置于onCreate:

  

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

并在外面创建:

  

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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);
                }

            }
        }

    }