l***@live.com
l***@live.com
  • 发布:2019-06-02 10:34
  • 更新:2019-06-10 15:49
  • 阅读:1598

webview方式集成5+SDK,页面白屏,求大神帮看看代码;

分类:5+ SDK

【问题描述】

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

}

2019-06-02 10:34 负责人:无 分享
已邀请:
wenju

wenju - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

Activity2是用webview方式集成 ? 按理说用了widget方式就不应该再用webview方式集成的呢... Activity2是如果是webview, 那么完全可以用Widget里面的H5界面呢... 原生调js打开Widget里面的H5即可

  • 邱天

    原生直接加载H5页面吗?这种方式还要集成5+sdk?不是多此一举了?我认为真正要解决的是webview页面之上新开一个webview界面,回退逻辑同widget集成一样的效果,不知道是否可以实现?实验中是不可以的,不知道有什么好的建议呢?

    2019-10-14 13:24

DCloud_Android_zl

DCloud_Android_zl

首先建议试一下楼上说的方法,如果上述方法不能解决的话,麻烦发一个demo我这边复现一下。

l***@live.com

l***@live.com (作者)

谢谢@wenju 和 @DCloud_Android_zl 两位老师。
这几天工作原因忙别的项目了,没上来看自己这个帖子。我回头按你们的建议去试试,再把结果更新到帖子来。

该问题目前已经被锁定, 无法添加新回复