C#开发移动应用系列(2.使用WebView搭建WebApp应用)
上篇文章地址:C#開發移動應用系列(1.環境搭建)
?
嗯..一周了 本來打算2天一更的 - - ,結果 出差了..請各位原諒..
今天我們來講一下使用WebView搭建WebApp應用.
說明一下為何要用WebApp的形式,因為首先..易于更新,其次學習成本又會降低一個檔次
因為不需要去很深入的了解各種安卓的界面布局,我們直接全屏覆蓋一個WebView就好了.(當然,實際應用中還是需要加入一部分原生控件來提高用戶體驗)
確定一下本篇的學習目標:
1.學會使用WebView基礎功能
2.通過WebView調用頁面中的JS代碼
3.通過WebView讓頁面中的JS代碼調用后臺的C#代碼
效果圖:
正文1.使用WebView構建基礎框架
? ?我們首先打開上一篇我們只放了一個button的界面.
? 從左側工具欄中找到WebView并拖到我們的界面中,并放大到覆蓋整個頁面.位置如圖:
然后編寫MainActivity.cs文件,在OnCreate()方法中獲取我們的webView并進行基礎設置
代碼如下:
//獲取WebView對象 var webView = FindViewById<WebView>(Resource.Id.webView1); //申明WebView的配置 WebSettings settings = webView.Settings; //設置允許執行JS settings.JavaScriptEnabled = true;//設置可以通過JS打開窗口settings.JavaScriptCanOpenWindowsAutomatically = true; //這里是自己創建的WebView客戶端類 var webc = new MyCommWebClient(); //設置自己的WebView客戶端 webView.SetWebViewClient(webc);說明都已經在注釋里了.
下面我們來講一下倒數第二行的MyCommWebClient是怎么來的.
這里是我們自己申明的一個客戶端類,用來攔截頁面的跳轉連接(不然會調用安卓原生游覽器加載新頁面),并在本頁面中加載用的,代碼如下:
class MyCommWebClient: WebViewClient{//重寫頁面加載的方法public override bool ShouldOverrideUrlLoading(WebView view, String url){ //使用本控件加載 view.LoadUrl(url);//并返回truereturn true;}}這樣,當頁面中有A標簽連接跳轉的時候就不會調用安卓的原生游覽器加載了.
最后,我們在MainActivity.cs文件加上一句代碼
webView.LoadUrl("你的地址");就會跳轉到你設定的頁面中了.
至此就完成了基本的WebView設置
我們進入下一個階段...
2.通過WebView調用頁面中的JS代碼
既然是要進行webAPP的開發 那么通過WebView來調用JS,肯定是少不了的..
下面我們就開始講解如何調用.
首先我們要創建一個Web項目..我這里的例子創建的ASP.NET Core的..
至于怎么讓你的Web項目可以局域網訪問..我就不多說了..自行百度
修改我們的前端HTML頁面
<body ontouchstart=""><button onclick="showmessage('頁面按鈕點擊')" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">彈出</button><script src="~/js/js/mui.js"></script><script src="~/js/examples/hello-mui/js/mui.js"></script><script>//定義一個JS方法,并返回一個字符串function showmessage(message) {mui.alert(message)return "JS反饋"}</script> </body>如果我們不需要獲取這個JS的返回值
那么很簡單,代碼如下:
webView.LoadUrl("javascript:" + "showmessage('安卓按鈕點擊')");就這樣,一句即可..
如果你要獲取返回值.那就請往下看..
我們需要使用到WebView的EvaluateJavascript函數
這個函數有兩個參數,一個是你要調用的JS,另一個則是IValueCallback
如圖:
我們要創建一個類,來繼承這個IValueCallback并提供返回值
代碼如下:
public class ValueCall : Java.Lang.Object, IValueCallback{//定義delegatepublic delegate void TestEventHandler(string message);//用event 關鍵字聲明事件對象public event TestEventHandler TestEvent;public void Dispose(){}//重寫方法,獲取返回值public void OnReceiveValue(Java.Lang.Object value){string a = value.ToString();TestEvent(a);}}這里我們采用事件回調的方式,來返回我們獲取的Value,(注:細心的朋友肯定發現了,我們還繼承了Java.Lang.Object,因為這個接口是Java的對象..所以..我們需要繼承一下JAVA基類..不然會報類型轉換錯誤)
?
然后我們回到MainActivity.cs
在里面定義ShowMessage()的函數如下:
public void ShowMessage(string message){//很簡單就是彈出返回值Toast.MakeText(this.ApplicationContext, message, ToastLength.Short).Show();}?
編寫OnCreate函數中的代碼如下:
//獲取按鈕 var btn = FindViewById<Button>(Resource.Id.button1);//添加點擊事件btn.Click += delegate{ValueCall vc = new ValueCall();//添加彈出返回值事件vc.TestEvent += ShowMessage;//調用JSwebView.EvaluateJavascript("showmessage('安卓按鈕點擊')", vc);};?
這樣,我們就完成了整個C#調用JS代碼并獲取返回值的過程
?
3.通過WebView讓頁面中的JS代碼調用后臺的C#代碼
下面我們就來講如何使用JS來調用C#代碼.
首先,我們申明一個類如下:
public class MyJSInterface : Java.Lang.Object{Context context;//因為要彈出內容..所以構造函數需要一個當前的上下文對象public MyJSInterface(Context context){this.context = context;}//注意,這里需要加兩個特性 [Export][JavascriptInterface]public void SayHello(string message){Toast.MakeText(context, message, ToastLength.Short).Show();}}?
其實很簡單,就是創建一個函數,然后添加兩個特性,代表著JS可以調用(有點類似WebAPI).
這里需要注意的是Java.Interop.ExportAttribute這個特性.
需要項目引用Mono.Android.Export
注意這里的項目引用..的意思..就是 右鍵項目-->選擇添加引用..而不是只Using
回到我們的MainActivity.cs文件中的OnCreate方法.給我們webview繼續添加代碼如下:
//添加我們剛創建的類,并命名為wv webView.AddJavascriptInterface(new MyJSInterface(this), "wv"); //加載測試頁面 webView.LoadUrl("http://192.168.14.134:57870/");?
修改我們測試頁面的代碼如下:
<body ontouchstart=""><button onclick="showmessage('頁面按鈕點擊')" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">彈出</button><button onclick="ShowAdMessage()" type="button" class="mui-btn mui-btn-primary mui-btn-outlined">調用后臺C#</button><script src="~/js/js/mui.js"></script><script src="~/js/examples/hello-mui/js/mui.js"></script><script>function showmessage(message) {mui.alert(message)return "JS反饋"}function ShowAdMessage() {// alert(wv); wv.SayHello("這里是JS調用后臺的C#代碼");}</script> </body>我們添加了一個按鈕,并直接通過wv對象來調用后臺的函數...
信息彈出成功.到此.我們的JS調用C#代碼就調用結束了
?
寫在最后?代碼雖然不多,但是很實用.
基本了解這些內容 我們就可開始我們的WebApp基礎開發了.
當然,這些只是基礎,我們要做一個商業應用..肯定是需要調用到機器的硬件設備,比如陀螺儀..攝像頭什么之類的..
這個我們留待后面講解..敬請期待.. ...
順便說一句..各位大哥 - -,期待更新的..是不是應該點個推薦加個關注?..(滑稽)
posted on 2018-09-10 11:32 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/9618189.html
總結
以上是生活随笔為你收集整理的C#开发移动应用系列(2.使用WebView搭建WebApp应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【共读Primer】55.[6.4]函数
- 下一篇: UDS学习笔记(六)——程序刷写