使用C#開發Android應用之WebApp


近段時間了解了一下VS2017開發安卓應用的一些技術,特地把C#開發WebApp的一些過程記錄下來,

歡迎大家一起指教、討論,廢話少說,是時候開始表演真正的技術了。。

 

1、新建空白Android應用

2、拖一個WebView控件進來

  

3、打開模擬器Genymotion,選擇一個系統版本,啟動

 

4、加載網頁

4.1 打開MainActivity.cs,在OnCreate方法里添加2行代碼

復制代碼
 1         protected override void OnCreate(Bundle savedInstanceState)
 2         {
 3             base.OnCreate(savedInstanceState);
 4 
 5             // Set our view from the "main" layout resource
 6             SetContentView(Resource.Layout.Main);
 7 
 8             var web = FindViewById<WebView>(Resource.Id.webView1);
 9             web.LoadUrl("http://www.baidu.com");
10         }
復制代碼

加載網頁就是這樣簡單,F5調試,就可以看到模擬器有了變化,打開了我們的應用,並如期加載了網頁

 

5、網頁端調用手機APP后台方法

5.1 打開MainActivity.cs,重寫OnCreate為如下

復制代碼
 1         protected override void OnCreate(Bundle savedInstanceState)
 2         {
 3             base.OnCreate(savedInstanceState);
 4 
 5             var webView = new WebView(this);
 6             SetContentView(webView);
 7 
 8             webView.Settings.JavaScriptEnabled = true;
 9             webView.AddJavascriptInterface(new CustomJSInterface(this), "CSharp");
10             webView.LoadUrl("http://192.168.0.113:8080/");
11         }
復制代碼

標紅的是實現前端調用后台方法的關鍵,新建CustomJSInterface.cs

復制代碼
 1     public class CustomJSInterface : Java.Lang.Object
 2     {
 3         Context context;
 4 
 5         public CustomJSInterface(Context context)
 6         {
 7             this.context = context;
 8         }
 9 
10         [Export]
11         [JavascriptInterface]
12         public void ShowToast(string message)
13         {
14             Toast.MakeText(context, message, ToastLength.Short).Show();
15         }
16     }
復制代碼

而"http://192.168.0.113:8080/"是我們的Web站點,大部分業務邏輯在網站里處理,WebApp只是在外表包了一個殼

5.2 我們再新建一個本地Web站點

改動首頁HTML,主要功能是點擊按鈕,會調用后台ShowToast,這是個提示功能

復制代碼
1 @{
2     ViewBag.Title = "Home Page";
3 }
4 
5 <br />
6 <div class="jumbotron">
7     <button type="button" onClick="CSharp.ShowToast('hello')">由前端調用C#后台方法</button>
8 </div>
復制代碼

瀏覽器預覽

 

5.3 VS2017按F5部署,可以看的模擬器也正常把本地站點加載進來了

點擊"獲取前端JS返回的數據"

6、APP執行前端JS方法

6.1 重寫OnCreate

復制代碼
 1             // 必須重寫WebView客戶端
 2             webView.SetWebViewClient(new CustomWebViewClient());
 3             // 先打開首頁
 4             webView.LoadUrl("http://192.168.0.113:8080/");
 5 
 6             // APP主動獲取前端數據
 7             var btn = FindViewById<Button>(Resource.Id.button1);
 8             btn.Click += delegate
 9             {
10                 var callback = new ReceiveValueCallback();
11                 callback.OnReceiveValueCallback += (message) =>
12                 {
13                     Toast.MakeText(this.ApplicationContext, message, ToastLength.Short).Show();
14                 };
15 
16                 webView.EvaluateJavascript("GetData()", callback);
17             };
復制代碼

6.2 新建CustomWebViewClient.cs

復制代碼
1     class CustomWebViewClient : WebViewClient
2     {
3         public override bool ShouldOverrideUrlLoading(WebView view, String url)
4         {
5             view.LoadUrl(url);
6             return true;
7         }
8     }
復制代碼

6.3 新建ReceiveValueCallback.cs,這個類主要負責處理前端返回的數據

復制代碼
 1     public class ReceiveValueCallback : Java.Lang.Object, IValueCallback
 2     {
 3         public delegate void OnReceiveValueCallbackHandler(string message);
 4         public event OnReceiveValueCallbackHandler OnReceiveValueCallback;
 5 
 6         // 重寫ReceiveValue方法
 7         public void OnReceiveValue(Java.Lang.Object value)
 8         {
 9             OnReceiveValueCallback(value.ToString());
10         }
11     }
復制代碼

6.4 修改Index.html

復制代碼
 1 @{
 2     ViewBag.Title = "Home Page";
 3 }
 4 
 5 <br />
 6 <div class="jumbotron">
 7     <button type="button" onClick="CSharp.ShowToast('hello')">由前端調用C#后台方法</button>
 8 </div>
 9 
10 <script type="text/javascript">
11     function GetData() {
12         return "123456789";
13     }
14 </script>
復制代碼

6.5 VS2017按F5部署

6.6 點擊按鈕"獲取前端JS返回的數據"

 

 7、WebAPP使用疑問

 7.1 細心的人可能注意到:前端代碼完全可以自己處理完業務,那還有WebApp什么事情呢?這時的APP完全就跟一個瀏覽器差不多!

7.2 確實是這樣的WebApp相對與其他安卓APP來說,是輕量級的,只是一個殼子,但是他也是有其合適的使用范圍;

比如:如果前端並沒有數據持久化功能(如純JS前端),這時要保存數據只能調用其他的WebApi,而由於JS的特性可能會引起一些安全問題。

或者根本沒有第三方API,數據需要保存在手機端,JS也沒有這種權限。

所以既兼顧了像升級Web站點那樣簡便,又有一些手機端的操作權限,WebApp應運而生。

 

 

出處:https://www.cnblogs.com/lanxiaoke/p/8725370.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM