發表文章

Xamarin : Android : Vibrate 使用裝置震動

圖片
在 Xamarin 下開發 Android 裝置需要振動程式碼如下 void button_vibrator_Click(object sender , EventArgs ea) {     // 建立振動服務     var vibrator = (Vibrator)GetSystemService(Android.Content.Context.VibratorService);     int iDuration = 500; // 500毫秒,振動持續時間       // 執行     vibrator.Vibrate(iDuration); } 這個 Vibrator 需要引用 using Android.OS; 這個服務屬於非同步機制,發出震動後不會等待振動時間完畢,而會繼續執行程式。 另外,還需要賦予適當的使用權限,可以在 專案屬性 調整 或是到 AndroidManifest.xml 裡增加 <uses-permission android:name="android.permission.VIBRATE" /> 建議使用專案屬性調整會比較安全,比較不會打錯字

Xamarin : Android : playback a tone 發出警告聲(簡單聲音)

在 Xamarin 下開發 Android 讓裝置發出 警告聲音 或是 提示聲音 void button_beep_Click(object sender , EventArgs ea) {     int iVolume = 100; // 0 ~ 100 音量,但不是裝置實際音量,而是產生音波的音量     int iDuration = 500; // 500毫秒,聲音持續時間     // 建立執行物件     var tonGen = new ToneGenerator(Android.Media.Stream.Music, iVolume);     //播放聲音     //tonGen.StartTone(Android.Media.Tone.CdmaAlertAutoredialLite,1000);     //tonGen.StartTone(Android.Media.Tone.CdmaAlertCallGuard, 200);     //tonGen.StartTone(Android.Media.Tone.CdmaAlertIncallLite, iDuration );     //tonGen.StartTone(Android.Media.Tone.CdmaAlertNetworkLite, iDuration );     tonGen.StartTone(Android.Media.Tone.PropBeep, iDuration ); } Android.Media.Tone 底下列舉不少基本 DTMF 的音調,可以自行選擇測試 這個元件比較適合播放訊息聲音(比較簡單的音調)。 如果要播放音樂建議使用 AudioTrack 物件。 注意這個播放是屬於非同步的,而且會以最後一次呼叫StartTone的聲音為主,如果同時播放多個聲音檔,則只會聽到最後一個聲音。

Xamarin : Android : Lock Screen(View) Orientation 禁止螢幕(畫面)旋轉

在 Xamarin 開發 Android 的時候如果要禁止畫面旋轉 要在 Activity 的程式碼使用下面方式(黃色部分)宣告 [Activity(Label = "ZxingTest", MainLauncher = true, Icon = "@drawable/icon" , ScreenOrientation =Android.Content.PM.ScreenOrientation.Portrait) ] Android.Content.PM.ScreenOrientation 裡面有些列舉屬性,像是: Android.Content.PM.ScreenOrientation.Portrait (豎屏;直向畫面) Android.Content.PM.ScreenOrientation.Landscape (橫屏;橫向畫面) 而大部分網路上說修改 AndroidManifest.xml 裡面更改 <activity> 屬性增加 android:screenOrientation="portrait"等這類方式都是  Android Studio 的開發方式 不是 Ms Visual Studio 的開發方式,所以特別紀錄一下。 為什麼要禁止螢幕旋轉: 除了特定版面排版特性之外, 當每次旋轉螢幕時 Activity 和 View都會被重載 (Reload/Redraw) ,此時畫面上所有物件都會被 摧毀並釋放記憶體空間,由於這個特性,在畫面上的資料如果沒被儲存就會消失的一乾二淨。 當然可以利用 OnSaveInstanceState 和 OnRestoreInstanceState 事件覆寫來處理資料儲存和還原,但是如果不想做太複雜,就直接設定禁止畫面旋轉就可以了。

Xamarin : Android : Using ZXing.Net.Mobile Scan Barcode 掃描讀取條碼/QR碼

圖片
網路上大部份文章在講 Xamarin 開發都用上了 CPL類型的專案, 對於純粹使用 Android 專案使用者要理解真是有點不方便, 這裡是記錄了在 Xamarin 下的 Android 專案如何開發一個讀取 條碼或是 QR碼的功能 個功能是基於 ZXing.Net.Mobile 套件開發的,可以自行把這個套件應用你的專案中 1、假設你經開啟了一個 Android blank Project (空白專案) 2、使用 NuGet 管理員去新增 ZXing.Net.Mobile 套件,並把它安裝到專案中 3、然後到你要呼叫使用 ZXing 操作的 Activity 去新增引用(在這案例裡我是放在 MainActivity.cs 內) using ZXing; using ZXing.Mobile; 4、在顯示畫面(Main.axml)上設計兩個 TextView 和一個 Button,用來啟動掃描和接收掃描的結果 5、然後就是把操作 ZXing 的程式碼加入,在這案例中,我只簡單全部做在 MainActivity 的 OnCreate 內,實際應用上你可以依照需要放置。 using Android.App; using Android.Widget; using Android.OS; using ZXing; using ZXing.Mobile; namespace ZxingTest {     [Activity(Label = "ZxingTest", MainLauncher = true, Icon = "@drawable/icon")]     public class MainActivity : Activity     {         //建立操作物件指標         private TextView _barcodeFormat, _barcodeData;         protected override void OnCreate(Bundle bundle)         {             base.OnCreate(bundle);             // 設定顯示畫

C# AES encrypt/decrypt and Base64 encode/decode

圖片
範例檔案: 這裡下載 純執行檔: 這裡下載 有興趣研究 AES 加解密 與 Base64 編解碼 的可以研究一下 因為用到了AES 元件,所以只適用 .NET 3.5 以上 畫面如下: 為什麼 AES 和 BASE64 寫在一起? 因為 AES 加密後的內容是 ASCII 碼,很多是無法以明文顯示的,因此會再編碼成BASE64以便傳遞或攜帶。反過來說,接收到AES的密碼通常會以BASE64編成居多,所以必須解碼後再進行AES解密環原本文。 Base64編碼: 要引用  using System; //將文字內容(明文)轉成base64文字(編碼) tbB64_2.Text = Convert.ToBase64String(Encoding.Default.GetBytes(tbB64_1.Text)); Base64解碼: 要引用  using System; //將base64編碼文字轉回明文(解碼) tbB64_1.Text = Encoding.Default.GetString(Convert.FromBase64String(tbB64_2.Text)); AES加密: 要引用  using System.Security.Cryptography; static byte[] EncryptionByAES(string plainText, byte[] key, byte[] IV) {   byte[] encrypted;   //檢查參數   if (plainText == null || plainText.Length <= 0)      throw new ArgumentNullException("沒有要加密的文字");   if (key == null || key.Length <= 0)      throw new ArgumentNullException("沒有提供金鑰");   if (IV == null || IV.Length <= 0)       throw new ArgumentNullException("沒有提供IV");   //這裡使用Ae

How customize part for Fritzing - 如何自訂 Fritzing 的元件

圖片
建議先瞭解一下 Fritzing customized part principle - Fritzing 自訂元件原則 如果不想瞭解或沒時間瞭解也沒關係,反正就是依樣畫葫蘆也可以 這裡使用的是 Fritzing 0.93b 版的,跟舊版的操作方式會有相當的出入,請注意 。 ○使用的工具:      Fritzing 0.93b 和 Inkscape 0.92.2 ○認識 Fritzing 元件編輯器:     這個版本的元件編輯器所在位置非常彆扭,以前它是直接列在工具『元件』裡面,現在則必須把元件拖進麵包板後才能新建元件。 1、首先開啟 Fritzing ,然後到『麵包板』 2、然後從右側『元件』拖拉一個元件到『麵包板』上,我這邊是選擇『CORE』裡面的 Mysery Part - 3 Pin 3、在『麵包板』上的元件按滑鼠右鍵叫出選單,選單裡面有個『Edit(New Parts Editor)』,點入後就可以看到元件編輯器了 元件編輯器上有6個主要標籤: 麵包板(breadboard): 主要是使用在麵包板上的圖片。 概要圖( schematic): 這邊我會稱為電路圖,因為這比較像電工科在畫的電路圖。 PCB: 印刷板電路,主要是提供給製作PCB輸出時的設計使用。 圖示(icon): 顯示在元件庫上的小圖案/圖示。 Metadata: 這個元件的相關資訊/訊息。 連接器(Connector): 設定這個元件的連接器/街腳/接點 編號、形式、名稱等等。 其中,前4種需要設計圖檔,但其實第4種 icon 可以使用元件編輯器直接以麵包板圖做為縮圖使用。 如果自製元件編輯完畢,記得要存檔,否則會消失不見喔!!! (它不會自動存檔) ○開始繪製圖檔:     使用 Inkscape 繪製 SVG圖檔。 我這邊的例子是以我在網路上購買的一個旋轉編碼器為例 在SVG設計上力求尺寸標準,尤其是連接器的接腳部分,因為這會大大影響您的元件使用在麵包板上時的的孔位是否能對準。 在製作圖檔時至少要做3種圖: 麵包板用 breadboard 概要圖  schematic : PCB:

Fritzing customized part principle - Fritzing 自訂元件原則

圖片
設計 Arduino 或 Resberry pi 的人,大概都用過 Fritzing 來設計電路 雖然它是免費的(當然也接受捐款,我也捐款過),但是缺點是零件(Part)種類無法包山包海。 大家最常遇到的問題是,找不到自己正在使用的零件,所以得靠第三方(別人的)的零件庫。 雖然有第三方零件庫,但說真的,在台灣的玩家常買對岸的零件時,或特製零件(某些賣場會找工廠批量設計生產)時都會找不到零件庫可以用或是下載。 雖然,網路上也接受客製化元件庫設計,不過是要收費的,對於學生/經濟力較弱的人來說,真的都是困難,不過 Fritzing 官方網站也有教您自己如何設計元件,也歡迎您把設計元件庫放在 GitHub 上分享給別人,不過前提是你要搞懂 Fritzing 設計元件的原理和方法。 所以,我把 Fritzing 使用自訂元件的原理,和設計方法簡單的說明一下,讓有心自己設計的人可以很方便的上手。 由於原理和實作內容可能不少,所以我分成幾篇來處理: Fritzing customized part principle - Fritzing 自訂元件原則(本篇) How customize part for Fritzing - 如何自訂 Fritzing 的元件 Make your fzbz file - 建立可以分享的元件檔(正在寫...) 注意我使用的 Fritzing 版本是 0.93b 的版本 , 作業系統是 Windows ,而網路上的中文教學大部分是舊版的而且不少使用 Linux (先說聲抱歉,我沒有用過 Linux,路徑請自行轉換),所以使用上有很大落差,尤其常常會找不到對應的功能表。 關係圖 檔案位置 ※沒相關資料夾的人請先安裝 Fritzing ,然後執行一次就會產生下面需要的資料夾。 Fritzing 的自訂元件通常會放在 %user%\Documents\Fritzing 下,這底下會有 Parts 和 Bins 兩個資料夾: 這個 bins 就是 Fritzing 畫面右邊那個元件庫啦~ 裡面會看到 search.fzb 和 my_parts.fzb 就是對應 搜尋放大鏡 和 My Parts 元件庫(Library)的。(圖案是MINE...