首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0003. C# Xamarin App英文單字複習程式

日期:2022年 06月 19日

標籤: C# Xamarin Android

摘要:個人作品


應用所需:1. Andriod手機
     2. Visual Studio 2019以上(需有Xamarin)
程式說明:使用Xamrain實作Andriod App的小作品
範例檔案:Githu連結※用Visual Studio 2019以上
執行程式:Apk檔案
基本介紹:本篇分為2大部分。
     前言
第一部分:介紹程式
第二部分:專案與程式說明






前言


最早完成是在2018年,當時還是Microsoft剛買下Xamrain 釋出永久免費版本
當時Xamain常常有問題,最近整理以前的作品發現
新版的Visual Studio與早期的Xamrain的程式也能很好相容
這裡的代碼未重構,是當時釋出的最終版本,是將多益的A-Z單字轉成程式App提供自己學習
Google Play上面有很多單字學習程式,這個程式只有收錄約3000個單字
但很輕量化只有10MB,裡面還有內建語音Google小姐語音



第一部分:介紹程式

Step 1:下載Apk並複製

下載後將檔案放進Andriod中
或者直接透過手機下載該檔案


Step 2:手機上安裝App

下載後從手機上執行Apk檔案


Step 3:設定信任-1

透過手機安裝Apk檔案,需要開啟可信任


Step 4:設定信任-2

設為允許這個來源的應用程式


Step 5:再次執行安裝

然後再次執行安裝,進入安裝中


Step 6:安裝完成

完成後,選擇開啟


Step 7:單字學習首頁

目前只有一個按鈕,點擊後可以進入下頁


Step 8:介紹設定功能

1:選擇單字的主題類型
2:英文單字的測驗範圍
3:開始測驗,進行練習


Step 9:驗測過程

1:出現本次的考題(開聲音還有英聽)
2:驗測的4個選擇,3個錯的,1個對的
3:目前為止的正確率
4:每次答題完後會出現,正確○ 與錯誤 X,做為提示




第二部分:專案與程式說明

Step 1:專案架構

1:資料庫檔案,使用Sqlite.db,並且單字庫存於此
2:主程式代碼,對應3.的頁面
3:Layout畫面UI對應2.的主程式代碼


Step 2:程式-首頁

首頁按鈕,點擊後觸發跳轉頁面


/// <summary>
/// 按下後前往新多益單字
/// </summary>
/// <param name="stender"></param>
/// <param name="e"></param>
void btn_Newtoiec(object stender, EventArgs e)
{
    Intent intent = new Intent(this, typeof(NewToeicActivity));
    this.StartActivity(intent);
}




Step 3:程式-權限檢核

對於Andriod Version 23版以前,檢查的權限會不同
會影響安裝與程式執行時是否可以使用Sqlite


/// <summary>
/// 檢查權限,依照andriod 版本有不同的要求權限方式
/// </summary>
private void CheckAppPermissions()
{
    if ((int)Build.VERSION.SdkInt < 23)
    {
        return;
    }
    else
    {
        if (PackageManager.CheckPermission(Manifest.Permission.ReadExternalStorage, PackageName) != Permission.Granted
            && PackageManager.CheckPermission(Manifest.Permission.WriteExternalStorage, PackageName) != Permission.Granted)
        {
            var permissions = new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage };
            RequestPermissions(permissions, 1);
        }
    }
}



Step 4:程式-驗測功能載入

載入時,會先讀取資料庫的單字庫


/// <summary>
/// 讀取資料庫資料
/// </summary>
public void Load_Data()
{
    string Output = "";
    try
    {
        bool responsebool = false;
        //取得Assets內的資源
        try
        {
            //NewToiec資料庫 
            var Sourcepath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), _DbName);
            using (var asset = Assets.Open(_DbName))
            using (var dest = File.Create(Sourcepath))
            {
                asset.CopyTo(dest);
            }
            Output += string.Format("資料庫:{0} 建立中...", _DbName);
        }
        catch(Exception ex)
        {
            Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
        }
        
    }
    catch (Exception ex)
    {
        Output += "無法讀取資料庫 Error : " + ex.Message;
    }
    Toast.MakeText(this, Output, ToastLength.Short).Show();
}



Step 5:程式-驗測功能驗測

載入後,開始驗測,會隨機抽取單字,寫到4個按鈕上


/// <summary>
/// 出題
/// </summary>
private void SetQuestion()
{
    try
    {
        //出題
        System.Random rnd = new System.Random(Guid.NewGuid().GetHashCode());
        //選一個正解
        _RightQuestion = rnd.Next(0, 4);//-- min >=   max< NowDb.Count()
        
        //設定畫面顯示文字
        FindViewById<TextView>(Resource.Id.NewToeic_linearLayout_top_textView_Question).Text = string.Format("{0}", this._UserQuizNewToeicTable[_NowCount].English);
        //發聲當前英文
        SpeakOut(this._UserQuizNewToeicTable[_NowCount].English);
        // MySpeech.Speak("abc", QueueMode.Add, null,null);
        //顯示隨機放置數
        List<int> Random_show = new List<int>();
        for (int i = 0; i < 4; i++)
        {
            if (i == _RightQuestion)
            {
                Random_show.Add(_NowCount);
                continue;
            }
            //配置不等於Right_Question的數值
            for (int obj = 0; ;)
            {
                obj = rnd.Next(0, _Total);
                if (obj != _NowCount && !(Random_show.Exists(o => o == obj)))
                {
                    Random_show.Add(obj);
                    break;
                }
            }
        }
        FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsA).Text = this._UserQuizNewToeicTable[Random_show[0]].Chinese;
        FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsB).Text = this._UserQuizNewToeicTable[Random_show[1]].Chinese;
        FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsC).Text = this._UserQuizNewToeicTable[Random_show[2]].Chinese;
        FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsD).Text = this._UserQuizNewToeicTable[Random_show[3]].Chinese;
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, "SetQuestion():錯誤訊息=> " + ex.Message, ToastLength.Long);
    }
}



Step 6:程式-驗測功能實現語音

先載用Libary 的 TextToSpeech,並且設定語言區域(US)
每次考題目時呼叫SpeakOut() 將要念的英文單字轉成語音


//語音
private TextToSpeech _MySpeech;

/// <summary>
/// 實作文字轉語音功能
/// </summary>
/// <param name="status"></param>
public void OnInit([GeneratedEnum] OperationResult status)
{
    if (status == OperationResult.Success)
    {
        //如果功能被調用 - 設定語音位置-請用英文
        _MySpeech.SetLanguage(Locale.Us);
    }
}
/// <summary>
/// 發出語音
/// </summary>
/// <param name="text"></param>
private void SpeakOut(string text)
{
    var p = new Dictionary<string, string>();
    _MySpeech.Speak(text, QueueMode.Add, p);
}