Hướng dẫn bulid app android với xamarin (Ứng dụng PhoneWork)

trong hướng dẫn này chúng ta sẽ dịch một chuỗi số và chữ do người dùng nhập vào và khi người dùng nhấn nút call sẽ gọi số đó
Bước 1 : thiết lập môi trường
các bạn kích chuột phải vào biểu tượng start chọn Programs and Featurse
tìm microsoft visual studio communty chọn Cross Platform Mobile Development chon tiếp c#.net Mobile Development rồi ấn update để thiết lập môi trường


Bước 2 : tạo một app mới
sau khi cập nhật xong các bạn mở visual studio lên
ấn tổ hợp phím Shift+ctrl+n để tạo một Project mới như hình sau đây
sau khi t project được tạo phát triển thư mục Resources và khi nhìn thấy layout folder trong cửa sổ Solution Explorer. nhấn đúp chuột vào Main.axml để mở nó trong Android Designer.
từ cột phía bên tay trái có tên là tool box chọn và kéo một Text (Large) lên giao diện của chúng ta
nhìn vào cửa sổ Properties và thay đổi thược tính text thành Enter a Phoneword như hình dưới đây

tiếp theo chúng ta kéo một Plain Text và đặt nó phía bên đước của Text (Large)
và trong cửa sổ Properties chúng ta sẽ thay đổi id (cái này như kiểu tên biến ) và thay đổi thộc tính text id là :@+id/PhoneNumberText
và text thay là gì thì tùy bạn
tiếp theo chúng ta sẽ kéo hau nút bấm vào
thay đổi thuộc tính của nó là id :@+id/TranslateButton và text là : Translate:
tiếp theo léo một nút Call tương tự và thay đổi thuộc tính và text lần lượt là @+id/CallButton và Call
Ấn CTRL+S để lưu lại
bước tiếp theo chúng ta sẽ thêm một đoạn code để dịch các số và chữ số thành số điện thoại có thể gọi được
Click vào project chọn new Item
đặt tên và lưu lại miễn sao có đuôi là .cs
đoạn code đó là : khuyến khích đặt tên là PhoneTranslator.cs:

using System.Text;
using System;
namespace Core
{
    public static class PhonewordTranslator
    {
        public static string ToNumber(string raw)
        {
            if (string.IsNullOrWhiteSpace(raw))
                return "";
            else
                raw = raw.ToUpperInvariant();

            var newNumber = new StringBuilder();
            foreach (var c in raw)
            {
                if (" -0123456789".Contains(c))
                    newNumber.Append(c);
                else {
                    var result = TranslateToNumber(c);
                    if (result != null)
                        newNumber.Append(result);
                }
                // otherwise we've skipped a non-numeric char
            }
            return newNumber.ToString();
        }
        static bool Contains (this string keyString, char c)
        {
            return keyString.IndexOf(c) >= 0;
        }
        static int? TranslateToNumber(char c)
        {
            if ("ABC".Contains(c))
                return 2;
            else if ("DEF".Contains(c))
                return 3;
            else if ("GHI".Contains(c))
                return 4;
            else if ("JKL".Contains(c))
                return 5;
            else if ("MNO".Contains(c))
                return 6;
            else if ("PQRS".Contains(c))
                return 7;
            else if ("TUV".Contains(c))
                return 8;
            else if ("WXYZ".Contains(c))
                return 9;
            return null;
        }
    }
}

sau đó lưu lại
Thêm code vào lớp MainActivity class. nhấn đúp chuột vào MainActivity.cs trong Solution Explorer và mở nó ra
bắt đầu bằng cách nối với Translate button. trong lớp MainActivity class .Tìm oncreate method thêm button code vào phía dưới ,dưới the base.OnCreate(bundle) và SetContentView (Resource.Layout.Main)
có được một tài liệu tham khảo đã được tạo trong layout file thông qua Android Designer.

EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton);
Button callButton = FindViewById<Button>(Resource.Id.CallButton);

Thêm một đoạn code để khi người dùng nhấn Translate button. thêm vào dòng cuối cùng của bước tiếp theo

callButton.Enabled = false;

// Add code to translate number
string translatedNumber = string.Empty;

translateButton.Click += (object sender, EventArgs e) =>
{
    // Translate user's alphanumeric phone number to numeric
    translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
    if (String.IsNullOrWhiteSpace(translatedNumber))
    {
        callButton.Text = "Call";
        callButton.Enabled = false;
    }
    else
    {
        callButton.Text = "Call " + translatedNumber;
        callButton.Enabled = true;
    }
};

tiếp theo thêm sự kiện khi người dùng nhấn nút Call thêm đoạn code tiếp tục đoạn code trên

callButton.Click += (object sender, EventArgs e) =>
{
    // On "Call" button click, try to dial phone number.
    var callDialog = new AlertDialog.Builder(this);
    callDialog.SetMessage("Call " + translatedNumber + "?");
    callDialog.SetNeutralButton("Call", delegate {
           // Create intent to dial phone
           var callIntent = new Intent(Intent.ActionCall);
           callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
           StartActivity(callIntent);
       });
    callDialog.SetNegativeButton("Cancel", delegate { });

    // Show the alert dialog to the user and wait for response.
    callDialog.Show();
};

Cuối cùng thời điểm để cho phép ứng dụng gọi một cuộc gọi .Ta có thể thay đổi điều này trong Android Manifest. Trong Solution Explorer, mở Android Manifest bằng cách ấn đúp chuột vào tên project khi chọn Android Manifest page



cuối cùng bạn test trên máy ảo .trước khi chạy bạn nên chọn phiên bản của android trong Visual Studio, mở the Application trang của Properties dưới Minimum Android to target:, trong ví dụ chọn API 19 như hình dưới

và bây giờ các bạn chỉ việc chạy xong
(mong các cao nhân chỉ giáo thêm nhiều ạ ) phần giải thích chi tiết từng đoạn code sẽ được viết ở bài sau

5 Likes

không có ai có hứng thú với xamarin nhể :v

1 Like

Mình cũng có 1 thời gian ngắn tìm hiểu về xamarin, nó hỗ trợ đa nền tảng, nhưng có lẽ m.n đã quen với việc làm độc lập trên mỗi nền tảng nên có lẽ ít người dùng.

:< nó chưa đến thời thôi

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?