Crosswalk基本用法示例(Demo)
博客轉(zhuǎn)載請標明出處:http://blog.csdn.net/nmyangmo/article/details/73105712
Android 5.0明確指出其webview是支持webRTC的,但是在國內(nèi)各大廠商的定制下。??瓤?#xff0c;算了,說多了都是淚啊~!
一怒之下我的webview內(nèi)核換成了crosswalk。換完之后直接被暴擊,APP體積增加了40M啊!!!
不過沒辦法了webRTC功能和好處還是很誘人啊,這里就不多說了。讓我們看crosswalk吧。
Crosswalk官方網(wǎng)址: https://crosswalk-project.org/
Crosswalk 下載地址: https://crosswalk-project.org/documentation/downloads.html
或者: https://download.01.org/crosswalk/releases/crosswalk/
**我下載的是: crosswalk-23.53.589.4.aar 這個版本,兼容x86和arm類型的CPU.
集成方法:1、設置grade外部庫為libs,拷貝aar文件到libs**
2、關聯(lián)crosswalk庫
compile(name: 'crosswalk-23.53.589.4', ext: 'aar')crosswalk的使用方法基本和webview一樣,只不過叫XWalkView
需要注意的是需要繼承XWalkActivity
重寫oncreate(),onXWalkReady()方法。加載網(wǎng)頁和配置都在crosswalk準備好后進行(onXWalkReady方法中)。關于XWalkView配置和webview基本相同,可以參考webview對XWalkView進行配置
WebView中的setwebViewClient(webViewClient)對應XWalkView中的setResourceClient(new XWalkResourceClient(mWebView)方法
mWebView.setResourceClient(new XWalkResourceClient(mWebView) {//=========HTML5定位==========================================================//需要先加入權限//<uses-permission android:name="android.permission.INTERNET"/>//<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>//<uses-permission android:name=// "android.permission.ACCESS_COARSE_LOCATION"/>@Overridepublic boolean shouldOverrideUrlLoading(XWalkView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onReceivedSslError(XWalkView view, ValueCallback<Boolean> callback, SslError error) {super.onReceivedSslError(view, callback, error);}@Overridepublic void onLoadFinished(XWalkView view, String url) {super.onLoadFinished(view, url);}@Overridepublic void onLoadStarted(XWalkView view, String url) {super.onLoadStarted(view, url);}@Overridepublic void onProgressChanged(XWalkView view, int progressInPercent) {super.onProgressChanged(view, progressInPercent);}@Overridepublic void onReceivedClientCertRequest(XWalkView view, ClientCertRequest handler) {super.onReceivedClientCertRequest(view, handler);}@Overridepublic void onDocumentLoadedInFrame(XWalkView view, long frameId) {super.onDocumentLoadedInFrame(view, frameId);}@Overridepublic void onReceivedHttpAuthRequest(XWalkView view, XWalkHttpAuthHandler handler, String host, String realm) {super.onReceivedHttpAuthRequest(view, handler, host, realm);}@Overridepublic void onReceivedLoadError(XWalkView view, int errorCode, String description, String failingUrl) {super.onReceivedLoadError(view, errorCode, description, failingUrl);}@Overridepublic void onReceivedResponseHeaders(XWalkView view, XWalkWebResourceRequest request, XWalkWebResourceResponse response) {super.onReceivedResponseHeaders(view, request, response);}});WebView中的setWebChromeClient(webChromeClient)對應XWalkView中的setUIClient(new XWalkUIClient(mWebView)方法
mWebView.setUIClient(new XWalkUIClient(mWebView) {@Overridepublic void onPageLoadStarted(XWalkView view, String url) {super.onPageLoadStarted(view, url);}@Overridepublic boolean onJsAlert(XWalkView view, String url, String message, XWalkJavascriptResult result) {return super.onJsAlert(view, url, message, result);}@Overridepublic void onScaleChanged(XWalkView view, float oldScale, float newScale) {super.onScaleChanged(view, oldScale, newScale);}@Overridepublic void onPageLoadStopped(XWalkView view, String url, LoadStatus status) {super.onPageLoadStopped(view, url, status);}});當然為了避免關閉xWalkView引起內(nèi)存泄露的問題,我們選擇了動態(tài)加載這個view.
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mWebView = new XWalkView(getApplicationContext()); mWebView.setLayoutParams(params); mLayout.addView(mWebView);因為webRTC需要錄音我們還需要動態(tài)的申請權限(查看Demo)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO},3332);} else {//mWebView.loadUrl(mUrl);} } else {mWebView.loadUrl(mUrl); }Demo還有網(wǎng)絡監(jiān)聽NetReceiver和來電監(jiān)聽PhoneCallReceiver,這里不再贅述,感興趣可以查看Demo源碼
博客轉(zhuǎn)載請標明出處:http://blog.csdn.net/nmyangmo/article/details/73105712
源碼下載:http://download.csdn.net/detail/nmyangmo/9868127
總結
以上是生活随笔為你收集整理的Crosswalk基本用法示例(Demo)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惠普总裁口述的职业规划(3)
- 下一篇: python导出数据到excel文件_P