【问题描述】
1,我先用widget方式集成了5+SDK,App运行良好,木有问题;然后我想从首页用原生的方式 startActivity(intent) 去打开另一个Activity2。这个Activity2是用webview方式集成;
2,写完代码后运行App,发现可以跳转到Activity2去,该Activity2设置背景颜色的代码也生效了,但是并没有加载H5+写好的页面,就是一个大蓝屏(因为我把背景颜色设为蓝色了)。已经多次检查,H5+页面的路径没有写错,但参数appid是随便写的。
3,如果Activity2要打开的H5+页面的url不变,但是参数appid换成应用的appid(也就是Manifest.json里定义的appid),则应用会先跳转到Activity2(一闪而过),然后跳回首页;
4,如果我把webview方式集成的这个Activity2要打开的url改成百度的网址,这个Activity2也还是大蓝屏,并不加载百度首页;但是系统会弹出一个应用选择框,让我选择打开百度首页的应用,比如QQ浏览器什么的……
总之,感觉这个Activity2是存在了,但无法生成一个能加载html页面的webview。可是日志上也没有任何报错。
下面是我的代码,请大神们帮看一下是不是有什么问题。因为应用本身已经是widget方式集成,打开应用就已经存在5+SDK的环境了,所以写webview方式集成的Activity2时我没有再按官方教程那样写WebviewModeListener这个类,直接在onCreate里用SDK.createWebview()去生成webview了。我也试过再写一个WebviewModeListener再次初始化5+SDK,结果是每次要跳转Activity2就会造成应用闪退。
【代码】
public class TestPaActivity extends Activity {
IWebview webview = null;
ViewGroup mRootView = null;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
final FrameLayout rootView = new FrameLayout(this);
mRootView = rootView;
mRootView.setBackgroundColor(0xff0000ff); // 背景设置生效,显示大蓝屏
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
webview.onRootViewGlobalLayout(mRootView);
}
});
// 设置单页面集成的appid
String appid = "TestAppid"; // 如果是应用的appid,会闪屏一下然后跳回到首页
// 单页面集成时要加载页面的路径,可以是本地文件路径也可以是网络路径
String url = "file:///android_asset/apps/xxxx/www/html/testPA.html";
// String url = "http://www.baidu.com"; // 百度首页也无法加载;系统会弹出打开百度首页的应用选择窗口;
webview = SDK.createWebview(this, url, appid, new IWebviewStateListener() {
@Override
public Object onCallBack(int pType, Object pArgs) {
switch (pType) {
case IWebviewStateListener.ON_WEBVIEW_READY:
// 准备完毕之后添加webview到显示父View中,设置排版不显示状态,避免显示webview时,html内容排版错乱问题
((IWebview) pArgs).obtainFrameView().obtainMainView().setVisibility(View.INVISIBLE);
SDK.attach(mRootView, ((IWebview) pArgs));
break;
case IWebviewStateListener.ON_PAGE_STARTED:
break;
case IWebviewStateListener.ON_PROGRESS_CHANGED:
break;
case IWebviewStateListener.ON_PAGE_FINISHED:
// 页面加载完毕,设置显示webview
webview.obtainFrameView().obtainMainView().setVisibility(View.VISIBLE);
break;
}
return null;
}
});
setContentView(rootView);
final WebView webviewInstance = webview.obtainWebview();
// 监听返回键
webviewInstance.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webviewInstance.canGoBack()) {
webviewInstance.goBackOrForward(2);
return true;
}
} return false;
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
}
}
邱天
原生直接加载H5页面吗?这种方式还要集成5+sdk?不是多此一举了?我认为真正要解决的是webview页面之上新开一个webview界面,回退逻辑同widget集成一样的效果,不知道是否可以实现?实验中是不可以的,不知道有什么好的建议呢?
2019-10-14 13:24