Xamrin開發安卓筆記(二)


昨天調理一天AAPT.EXE 被推出的問題(錯誤代碼 error MSB6006: "aapt.exe" exited with code -1073741819),糾結一天到底是什么原因,寢食難安,后來想通了可能是安卓模擬器的原因。今早換了一個安卓SDK,到現在沒出現AAPT的錯誤。

並且可以可視化布局(之前可視化布局很丑陋)。然后接着寫,暫時拋棄vs2015,因為2015的BUG直接影響我編寫的感覺,所以先用vs2013 update4繼續寫。

首先解決的是真機調試的問題,之前沒搞過安卓,不知道這么調試,其實超級簡單。插上安卓機器,開發者模式的USB調試選項打開,找個什么手機管家之類的東西,把驅動安裝上(有的手機型號不自動安裝驅動,導致能識別他是個移動設備但是無法讓VS認識他,所以最好找個什么管家之類的東西把驅動安裝上)。

首先寫的是跳轉傳值的事情,這個屬於常用功能。布局就不多說了,就是一個按鈕,拖進來改個名字。改個ID,生成(為了避免CS文件找不到這個ID,這個事情以后不在說了)

1 btnTo.Click += delegate
2             {
3                 //要跳轉的地址
4                 var second = new Intent(this, typeof(SecondActivity));
5                 //帶過去的參數(key,value)
6                 second.PutExtra("tel", txtPhone.Text);
7                //執行跳轉
8                 StartActivity(second);
9             };

帶參數跳轉到另一個頁面。另一個頁面獲取參數

 1 Intent.GetStringExtra("tel"); 

通過KEY索檢數據。我感覺跳轉很簡單。。

接下來說通知事件,通知事件有好幾種實現方式,不過我寫完之后VS告訴我使用的方法已經過時。這讓我很傷心。

先說一下普通的通知吧,安卓的通知是可以閃燈,響聲,震動。這些通過通知的屬性來實現。

通知調用 Notification 類來實現。看下具體代碼

 1   btnPush.Click += delegate {
 2                 Notification notify = new Notification(Resource.Drawable.Icon, "你有新的短消息");
           //響聲,震動,LED閃燈需要調用這個屬性
3 notify.Defaults = NotificationDefaults.All; 4 //注意RingtoneManager這個需要引用 Android.Media;獲取系統聲音 5 Android.Net.Uri uri = RingtoneManager.GetDefaultUri(RingtoneType.Notification); 6 notify.Sound = uri;//鈴聲路徑 7 //震動方式數組形式,{震動時間,間隔時間,震動時間} 8 notify.Vibrate = new long[] { 1000,300,1000}; 9 //Color靜態類需要引用這個 Android.Graphics 10 //LED等是自動循環的不用像震動那樣設置循環間隔 11 notify.LedARGB = Color.Green; 12 notify.LedOffMS = 1000;//顯示時間 13 notify.LedOnMS = 1000;//關閉時間 14 notify.Flags = NotificationFlags.ShowLights | notify.Flags; 15 var pIntent = PendingIntent.GetActivity(this, 0, 16 new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent); 17 notify.SetLatestEventInfo(this, "通知頭", "通知內容", pIntent); 18 Mgr.Notify(0, notify);//通知ID和通知 19 };

據說這個是2.0時代的代碼,很古老。

Mgr的初始化寫法是

var Mgr = (NotificationManager)GetSystemService(NotificationService);

當然你可以不實用弱變量,隨意咯。

這里重點說一下這句話

var pIntent = PendingIntent.GetActivity(this, 0,new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent);

索檢一個新的活動,第一個參數是上下文(貌似所有關於上下文的時候都是this)第二個參數巴拉巴拉說一大堆結果括號里面說暫時沒啥用,但是你必須寫。第三是點擊通知啟動哪個活動頁面,第四個是發送標志。

這句話目的是當用戶點擊通知的時候執行那個頁面。不寫不行,因為通知必須指定到某個地方去。

最后執行通知。

另一個寫法據說是3.0的寫法。如下

 1 btnBuilder.Click += delegate
 2             {
 3                 var pIntent = PendingIntent.GetActivity(this, 0, new Intent(this, typeof(SecondActivity)), PendingIntentFlags.UpdateCurrent);
 4                 var notify = new Notification.Builder(this)
 5                     .SetTicker("你有新的短消息")
 6                     .SetSmallIcon(Resource.Drawable.Icon)
 7                     .SetContentTitle("通知頭")
 8                     .SetContentText("通知內容")
 9                     .SetContentInfo("右下角");
10                 Mgr.Notify(0, notify.Notification);//通知ID重復則不會被取消貌似重復的話會變成另一個ID
11             };

我欣賞3.0的寫法。簡約而不簡單。所有的東西都可以靠 點來完成,而且參數屬性比2.0寫法還要多。這個寫法也可以寫上震動,閃燈,聲音,可以自己看看哪個是。

今天先更新這么多。下一次更新估計就開始系統的學習一些東西了。

總結一下這幾天的體驗,安裝方面盡量找靠譜的模擬器,我就在模擬器上吃虧,Xamrin版本盡量最新。

代碼執行風格類似MVC。

所有事件都是先 實例化,在去修改他的各種屬性,最后執行。而不像以前寫web那樣,頁面畫一畫CS代碼直接寫執行。幾乎每個東西都需要去做實例化。

var變量和強類型,自己把握用哪個,我個人覺得var其實不錯。

就這樣吧。接下來會繼續更新的。

 

如果有哪里描述不清楚或者錯誤,請指出,我會馬上更改的,畢竟我也是第一次用這個東西。

轉載請注明出處。

 


免責聲明!

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



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