这是基于Metaio sdk的,但不确定问题是否取决于它。我已经使用Creator创建了一个基于AREL的基本Android应用程序。在检测到标记时,我想在网络视图中加载一个url。
然而,当检测到标记时,我会收到选择在哪个浏览器中打开url的对话框。
我如何覆盖它并在我的应用程序的网络视图中打开它?
我尝试使用公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url),但没有被调用。
如何确保获得"活动"试图打开的所有URL?这样我就可以将调用定向到网络视图。。
在我的活动中,我在Create:上有这样的内容
mWebView=(WebView)findViewById(R.id.WebView);mWebView.setWebViewClient(新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);
}
}
您的覆盖中有一个错误。您应该在shouldOverrideUrlLoading()
结束时返回false
。这将允许您的WebView而不是系统来处理请求。
您是否尝试过使用AREL在AREL中直接执行此操作。Media.openWebsite(url,false);
http://dev.junaio.com/arel/documentationArelJS/symbols/arel.Media.html#.openWebsite
您可以直接从创建者处编辑arel代码。
我通过在ARELInterpriseCallback中重写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);
}
}
}
}