Bài 3: Cách kết nối máy ảo Genymotion với máy ảo Android Wear


Để giúp các bạn sinh viên có thể dễ dàng lập trình đồng hồ thông minh mà không có điều kiện mua máy móc thiết bị thật, bài này Tui sẽ hướng dẫn các bạn cách thức kết nối từ máy ảo Genymotion tới máy ảo Android Wear như thế nào. Làm được bài hướng dẫn này bạn sẽ tiết kiệm được rất nhiều tiền vì không phải đầu tư vào những thiết bị thật. Bạn cần phải cấu hình theo đúng các bước mà Tui hướng dẫn dưới đây

Bước 0:

  • Tải và cài đặt máy ảo Genymotion: tải tại đây
  • Bắt buộc máy ảo Genymotion của bạn phải cài Google play Service: Đọc tại đây (Tui hướng dẫn rất kỹ)

Bước 1:

  • Tải và kéo thả Android Wear vào máy ảo Genymotion: Tải tại đây (chọn version phù hợp verion Genymotion của bạn rồi kéo vào), kéo thả vào xong nó có biểu tượng dưới đây là OK:

h3_1Bước 2:

  • Cấu hình để máy ảo Genymotion kết nối được với máy ảo Android  Wear.
  • để cho dễ dàng sử dụng Genymotion thì Tui hướng dẫn các bạn sử dụng Plug in Genymotion để nhúng nó vào Android Studio cho tiện:

Trong Android Studio bạn vào menu File/ chọn Settings…:

h3_2Sau khi chọn Settings…==> chọn Browse Repositories trong mục Plugins:

h3_3Sau khi chọn Browse repositories, bạn tìm Genymotion:

h3_4Ở màn hình trên bạn bấm chuột phải vào Genymotion chọn Download and Install, hoặc bên phải có nút Install bạn nhấn vào nó.

Sau khi cài đặt xong bạn thấy thông báo khởi động lại Android Studio thì bạn nhớ khởi động lại:

h3_5Sau khi khởi động lại Android Studio bạn sẽ thấy biểu tượng Genymotion được đính kèm trên toolbar của nó:

h3_6Lần đầu tiên khi bạn bấm vào biểu tượng này thì nó yêu cầu thiết lập đường dẫn cài đặt Genymotion, bạn chọn đúgn đường dẫn cài đặt:

h3_7Khi đã cấu hình xong rồi thì lúc bấm vào biểu tượng Genymotion trên thanh toolbar thì bạn sẽ thấy màn hình sau:

h3_8Nút New: Bấm vào để tạo máy ảo mới

Nút Start: Bấm vào để kích hoạt máy ảo

Refresh: Để cập nhật lại thông tin

Ở màn hình trên là đã có sẵn 1 máy ảo được tạo trước, bây giờ bạn nhấn nút Start:

h3_9Bạn chờ cho máy ảo Genymotion được kích hoạt lên, bạn nhấn nút Refresh sẽ thấy địa chỉ IP của máy ảo được cập nhật trong màn hình trên (IP này có thể được sử dụng cho các trường hợp khác).

  • Kế tới bạn chạy máy ảo Androi Wear lên:

h3_11Ở hình trên Tui đã chạy phần mềm Android Wear trong máy ảo Genymotion lên và nó có báo Not Connected.

Bây giờ Tui hướng dẫn các bạn cách cách hình để cho máy ảo Genymotion có thể kết nối được với máy ảo Android Wear:

Bước 2.1:

Viết lệnh để tìm được địa chỉ và port của máy ảo Genymotion trong Android Studio:

h3_12Ở hình trên bạn vào tab “Terminal” rồi gõ lệnh theo thứ tự từ 1 tới 5 bạn sẽ ra được kết quả đó là Địa chỉ Ip và Port mà máy ở Genymotion đang sử dụng.

Chú ý 1: Nếu bạn đã cấu hình biến môi trường cho adb thì chỉ gõ lệnh số 5: adb devices là đủ rồi.

Chú ý 2: Ở trên Tui cài Android Studio vào đúng đường dẫn đó, nếu bạn cài nó chỗ khác thì phải trỏ cho đúng chỗ nha, đừng có làm như cái máy mà không hiểu vì sao nó lỗi.

Bước 2.2:

Viết lệnh kết nối từ máy ảo Genymotion tới máy ảo Android Wear:

h3_14Ở trên bạn gõ lệnh:

adb -s 192.168.56.101:5555 forward  tcp:5601 tcp:5601   

Để kết nối tới Android Wear.

Bước 2.3:

Trong máy ảo Genymotion bạn nhấn vào biểu tượng menu:

h3_15Sau đó bạn chọn Connect Emulator:

h3_16Và kết quả là đã kết nối thành công như hình Tui chụp dưới đây:

h3_10Bạn quan sát khi kết nối thành công từ máy ảo genymotion tới máy ảo Android Wear thì mọi thao tác trên Genymotion nó sẽ được đồng bộ hóa qua Android Wear.

Bài hướng dẫn này khá thú vị và khá khó đúng không các bạn, không phải bạn nào làm theo hướng dẫn cũng thành công vì tùy vào kiếp trước bạn ăn ở có tốt hay không. Nó lệ thuộc vào Version của Genymotion, lệ thuộc vào Google Play service mà bạn cài cho Genymotion, lệ thuộc vào Android Wear mà bạn kéo thả vào genymotion, lệ thuộc vào các lệnh kết nối mà bạn có làm đúng theo hướng dẫn hay chưa.

Bạn cố gắng làm được bài này vì nó rất có lợi cho bạn do bạn không phải mua bất kỳ thiết bị thật nào để test, sẽ tiết kiệm chi phí rõ rệt cho các bạn

Chúc các bạn thành công.

Bài 2: Cách đóng gói để xuất bản ứng dụng Đồng Hồ Thông Minh


bài 1 Tui đã hướng dẫn một cách chi tiết và đẩy đủ cách thức cấu hình, tạo project, sử dụng máy ảo, kết nối debug ứng dụng trên máy thật thông qua BlueTooth…, trong bài này Tui sẽ hướng dẫn các bạn cách đóng gói để xuất bản ứng dụng Đồng Hồ Thông Minh cho người sử dụng.

Các bạn chú ý là đối với các ứng dụng Đồng Hồ Thông Minh thì người sử dụng không thể truy suất và cài đặt trực tiếp ứng dụng vào đồng hồ được, do đó chúng ta phải đóng gói ứng dụng Đồng Hồ Thông Minh vào bên trong ứng dụng Mobile (Hay nói cách khác là hiện nay Google chưa cung cấp – hay không thể cung cấp Google Play để cho chúng ta có thể cài đặt trực tiếp ứng dụng từ Google Play vào Đồng Hồ Thông Minh bởi do đặc thù của nó).

Để đóng gói đúng ứng dụng thì các bạn phải làm theo 5 bước sau(làm khác cũng được…nhưng mà không chạy nha):

Bước 0:

  • Khi tạo một ứng dụng Wearable thì phải chọn đồng thời cả Mobile&Tablet

Bước 1:

  • Tất cả các permission mà khai báo trong Manifest cho Wearable thì phải đưa y xì qua Manifest của Mobile/Tablet (tức là chỉ việc dùng công nghệ cao là Ctrl+ c==>Ctrl+V)

Bước 2:

  • Phải đảm bảo rằng cả Wearable App và Mobile App phải có cùng package và cùng version (Thông thường khi bạn tạo ở bước 0 thì nó đã giống tên y xì vậy rồi, tuy nhiên một số bạn Sinh Viên hay tỏ vẻ nguy hiểm sửa lung tung trong khi mới học dẫn tới không biết vì sao nó lỗi, do đó mới học thì cứ để mặc định nha… không ai trả lương cho độ nguy hiểm của chúng ta đâu)

Bước 3:

  • Vào file build.gradle(mobile) bổ sung thêm dòng lệnh  wearApp project(‘:wear‘) với wear là tên ứng dụng đồng hồ thông minh, nó tên gì thì đặt tên đó. Thường mặc định tên là wear luôn nên ta không cần đổi gì (Tức là khi ở bước 0 hệ thống đã tự làm giùm ta bước 3 rồi).
  • Ví dụ đại khái như sau:

dependencies {
compile 'com.google.android.gms:play-services:5.0.+@aar'
compile 'com.android.support:support-v4:20.0.+''
wearApp project(':wearable')
}

Bước 4:

Tiến hành build Signed APK.

Bạn vào Menu Build / chọn Generate Signed APK, Android Studio sẽ tiến hành build bản Release cho Mobile (APK này đã đóng gói luôn cái ứng dụng đồng hồ thông minh do bước 3 cấu hình rồi). Nếu như 1 ứng dụng đã được Generate với Signed APK thì khi bạn cài phần mềm này vào điện thoại thì nó sẽ tự động cài đặt luôn ứng dụng Đồng hồ thông minh vào đồng hồ của bạn khi 2 thiết bị này đang kết nối (là đang kết nối bằng blue tooth như ở bài 1 đã hướng dẫn sử dụng phần mềm Android Wear để cấu hình kết nối giữa điện thoại và đồng hồ thông minh).

Khi build ra được Signed APK thì có 2 kịch bản sử dụng:

1- Bạn publish APK này lên Google Play nếu đã đăng ký mua của Google (25USD + 1 USD giao dịch nếu có), lúc này ai sử dụng thì cứ việc vào Google play cài đặt ==> tự động nó cài wear vào đồng hồ nếu mobile và đồng hồ đang kết nối

2- Bạn không có tiền mua Google Play, thì chép Signed APK nó tạo vào điện thoại rồi tự cài==>tự động nó cài wear vào đồng hồ nếu mobile và đồng hồ đang kết nối (bạn có thể gửi Signed APK này cho khách hàng rồi hướng dẫn họ cài đặt là xong)

Tui đã thử và thành công nên nếu các bạn làm không được tức là làm chưa đúng nha.

Tuy nhiên nhiều năm đi dạy Tui thường biết Sinh Viên cương quyết không hiểu mặc dù Tui có nói kỹ tới mấy… Cho nên Tui hay nói đùa với Sinh Viên “Em không làm thì Thầy tưởng em không biết… khi em làm rồi thì … không còn nghi ngờ gì nữa”. Vì vậy Tui sẽ minh họa lại 5 bước bên trên bằng 1 Project cụ thể như sau: Tải 1 hình trên mạng vào Đồng Hồ Thông Minh.

Bước 0: Tạo ứng dụng Đồng hồ thông minh tên là “TaiHinhVeDongHo” (hiện nay Đồng hồ thông minh chưa cho phép lấy hình ảnh trực tiếp từ internet, nhưng Tui đặt tên này để xem lỡ Tui tìm ra cách thì tính sau), tạm thời Project này đơn giản chỉ là kiểm tra Đồng hồ thông minh có đang kết nối internet không mà thôi:

h1Bấm next :

h2Ở màn hình này bạn tick vào cả Phone/Tablet và Wear rồi bấm next… để tạo được cấu trúc ứng dụng như hình dưới đây:

h3Bạn nhìn thấy có 2 Module ứng dụng đồng thời là: mobilewear

Bước 1: Vì bài này Tui muốn kiểm tra xem đồng hồ có kết nối internet hay không và muốn tải 1 hình từ trên mạng về hiển thị lên đồng hồ vì vậy Tui phải cấp quyền internet, access wifi… trong Manifest của wear ==> sao chép các quyền này vào Manifest của mobile:

h17Bước 2: Đảm bảo wear và mobile có y xì package name(như đã nói mặc định là giống), tuy nhiên bạn có thể kiểm tra:

h5Bước 3: Thêm lệnh wearApp project(‘:wear‘) vào build.gradle. Thường là mặc định hệ thống làm giùm ta, xem hình:

h6Trước khi qua bước 4 tạo Signed APK thì bây giờ Tui coding để Kiểm tra xem Đồng hồ thông minh có đang kết nối internet không thôi nha:

  • Trong layout của wear có rect_activity_main.xmlround_activity_main.xml, sửa lại như sau cho cả 2 xml này giống y xì như đây:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.tranduythanh.taihinhvedongho.MainActivity"
    tools:deviceIds="wear_square">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kiểm tra kết nối"
        android:id="@+id/btnKiemTra"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/txtKetNoi" />
</LinearLayout>
  • Tiếp theo coding MainActivity của wear:
package com.tranduythanh.taihinhvedongho;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    Button btnKiemTra;
    TextView txtKetNoi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
        stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub stub) {
                addControls(stub);
                addEvents();
            }
        });
    }

    private void addEvents() {
        btnKiemTra.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                xuLyKiemTraKetNoi();
            }
        });
    }

    private void xuLyKiemTraKetNoi() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        if(cm.getActiveNetworkInfo() != null)
        {
            txtKetNoi.setText("Có internet");
        }
        else
        {
            txtKetNoi.setText("Không Có internet");
        }
    }

    private void addControls(WatchViewStub stub) {
        btnKiemTra= (Button) stub.findViewById(R.id.btnKiemTra);
        txtKetNoi= (TextView) stub.findViewById(R.id.txtKetNoi);
    }
}

Bước 4: Tạo Signed APK, bước này là khó nhất.

Vào menu Build/ chọn Generate Signed APK…:

h7Sau khi chọn Generate Signed APK… bạn chọn mobile trong màn hình dưới đây:

h8Bấm Next để tiếp tục:

h9Mục Key store path: Là nơi lưu trữ key, bạn nhấn vào nút “Create New…”:

h10Sau khi đặt tên file rồi nhấn OK :

h12Ở màn hình trên bạn tiến hành đặt mật khẩu cho Key Store, nhập thông tin cho Certificate. Bạn chú ý là thông tin này vô cùng quan trọng , nếu như bạn làm mất nó thì về sau bạn muốn cập nhật phiên bản sẽ không bao giờ được, đồng nghĩa với việc phải viết lại ứng dụng (đặt package khác vì google chỉ cho tồn tại 1 package không trùng nhau). Do đó lưu ở đâu thì phải nhớ, tốt nhất là backup ở đâu đó trên mạng.

Sau khi bạn nhấn OK ở màn hình trên thì thông tin sẽ được hiển thị lại màn hình đâu như sau:

h13Bạn tiếp tục bấm Next:

h14Chọn Release rồi bấm Finish, sau đó ngồi chờ hơi lâu nha để đợi Android studio tạo ra file xuất bản phần mềm, khi build xong thì nó hiển thị “Show in explorer”, bạn bấm vào để lấy file xuất bản:h15Bạn xem thư mục chứ file xuất bản:

h16Sau khi cài xong trên điện thoại, bạn chờ nó tự động cài wear vào đồng hồ thông minh (chú ý là 2 thiết bị này phải đang kết nối với nhau nha – thường bằng blue tooth mà Tui đã hướng dẫn ở bài 1). Tui đã test thành công.

Bạn có thể tải source code mẫu tại đây: http://www.mediafire.com/download/j869oscr5p10q3y/bai2_TaiHinhVeDongHo.rar

Các bạn cố gắng, chúc các bạn thành công

Bài 1: Bắt đầu lập trình đồng hồ thông minh Android Wear


Tui tính gác kiếm chuyển nghề bán kem nuôi vợ con đồng thời nếu bán ế thì vẫn ăn được vì Sài Gòn nó “Lóng” kinh khủng khiếp. Khuya nay ngồi buồn ngắm cái đồng hồ Moto 360 được anh Bùi Quang Tuấn(CTO Co-founder https://mb360.vn/) tặng nhân chuyến từ Úc về Việt Nam trình bày dự án startup về Mobile Payment, một dự án mà Tui cảm nhận rất tuyệt vời, có một tầm nhìn khá xa về tương lai của hình thức thanh toán cũng như quản trị hệ thống bán hàng.

Tui không biết có nên trách hay nên cảm ơn anh Tuấn đây, vì nó làm Tui nổi máu mài kiếm trở lại. Tui sẽ thử các chức năng ứng dụng cũng như cách thức lập trình trên đồng hồ thông minh Moto 360 chạy hệ điều hành Android Wear này. Mỗi lần máu cái gì là Tui lại cặm cụi làm dẫn tới Long Thể bất an, đôi mắt nó nổi cục lên vì hàng đêm trợn mắt nghiên cứu. Chúc công ty của anh luôn thành công, Tui hơi ngại khi nhận quà tặng của anh bởi vì do Tui dạy miễn phí cho nhân viên của anh mà anh lại tặng nó cho Tui khác nào là 1 cách trả công khác, tuy nhiên nó lại có khả năng lập trình được nên cũng làm Tui hơi hơi máu.

mot-360-gen1-chrome-540Hình ảnh đồng hồ Moto 360

Nếu như bạn nào đã học các bài giảng liên qua tới android ở https://duythanhcse.wordpress.com/lap-trinh-di-dong/android/ thì việc lập trình với Đồng hồ thông minh sẽ được dễ dàng hơn.

Trong bài đầu tiên về lập trình đồng hồ thông minh này Tui sẽ trình bày các kiến thức sau:

  1. Cách tạo Project Wearables
  2. Cách tạo và sử dụng Đồng hồ ảo thông minh (gọi là máy ảo)
  3. Cách lập trình và triển khai ứng dụng lên máy ảo
  4. Cách cấu hình cho điện thoại thật và Moto 360 kết nối được với nhau
  5. Cách cấu hình lập trình phần mềm tương tác được với máy thật (Moto 360) thông qua Bluetooth

Bạn nắm được 5 mục Tui liệt kê ở trên là có thể bắt đầu lập trình các ứng dụng liên quan tới Đồng hồ thông minh được rồi.

Bây giờ Tui sẽ đi vào chi tiết từng phần.

  1. Cách tạo Project Wearables

Nếu như máy tính của bạn chưa bao giờ lập trình Android thì phải cài JDK, Android Studio (tự xem lại các bài hướng dẫn lập trình Android).

Trong các bài hướng dẫn lập trình Đồng hồ thông minh Tui mặc định các bạn đã rành về Mobile Android.

Bạn khởi động Android Studio/ chọn Start a new Android Studio Project như hình dưới đây:

wear1Màn hình tạo mới một Project sẽ hiển thị ra dưới đây:

wear2Application name: đặt tên là DongHoDienTu

Company domain: Làm cho công ty nào thì sài domain của công ty đó, nếu cá nhân thì lấy theo cá nhân (thường là như vậy để đánh dấu bản quyền).

Sau đó bấm Next để qua màn hình chọn thiết bị sử dụng, tại màn hình này ta chọn Wear:

wear3Sau khi chọn Wear và Minimum SDK thì bấm Next để qua màn hình chọn các loại Activity cho ứng dụng:

wear4Ở màn hình chọn Activity này bạn thich chọn loại nào phù hợp với mình cũng được, vì mới học nên bạn chọn Blank Wear Activity rồi bấm next để qua màn hình hiệu chỉnh Activity như dưới đây:

wear5Activity name: Tên màn hình chính

Layout name sẽ include 2 layout Round Layout và Rectangular Layout

Thường 4 thông số tại màn hình này ta để mặc định không có chỉnh sửa rồi bấm nút finish để tiến hành tạo ứng dụng. Bạn chờ chút ít thời gian (tùy vào cấp độ rùa máy của bạn):

wear6Sau khi build ứng dụng xong bạn có cấu trúc dự án như dưới đây:

wear7Phần cấu trúc dự án Đồng hồ thông minh nó giống y xì như Mobile nên Tui không nói lại nữa. Như vậy tới đây chúng ta đã biết cách tạo một dự án lập trình cho Đồng hồ thông minh như thế nào.

2. Cách tạo và sử dụng Đồng hồ ảo thông minh (gọi là máy ảo)

Với những bạn không có đồng hồ thông minh chạy hệ điều hành Android Wear thì có thể sư dụng Máy ảo, các bước tạo như sau:

Bước 1: Từ màn hình ứng dụng chọn AVD Manager như hình dưới đây

wear8Bước 2: Tạo và chọn máy ảo để chạy:

wear9Ở màn hình Android Virtual Device Manager ở trên, Tui đã tạo một Đồng hồ ảo thông minh Android Wear Round API 22, nếu bạn cũng có thì bấm vào nút màu xanh ở trên để chạy máy ảo. Còn chưa có thì bấm nút “Create Virtual Device”. Khi nhấn nút “Create Virtual Device” thì màn hình tạo máy ảo sẽ hiển thị ra như dưới đây:

wear10Ở mục Category bạn chọn Wear, sau đó chọn loại Đồng hồ ảo thông minh rồi bấm Next. Hiện nay Google cung cấp 3 loại giao diện đồng hồ thông minh đó là:

  • Loại 1: Android Wear Square (mặt màn hình là Hình Vuông):

wear11

  • Loại 2: Android Wear Round (mặt màn hình là Hình Tròn):

wear12

  • Loại 3: Android Wear Round Chin (mặt màn hình là Hình Tròn và bị cắt 1 miếng bên dưới)

wear13Bây giờ bạn bấm Next để qua màn hình tiếp theo.

wear14Tại màn hình này bạn chọn Release rồi bấm Next (Thông thường lần đầu tiên bạn cài thì sẽ không có bạn vào bấm vào nút Download kế bên Release Name rồi chờ hệ thống tải về). Trong trường hợp này Tui đã tải về rồi nên chỉ cần chọn rồi bấm Next:

wear15Mục AVD Name: Bạn đặt tên cho máy ảo

Các thông số khác chưa rành cứ để mặc định (bạn có thể bấm vào Show Advanced Settings ) để cấu hình chi tiết hơn nhưng mà không cần thiết vì Google đã tự động chọn cấu hình tốt cho ta rồi.

Bạn bấm Finish để kết thúc quá trình tạo máy ảo, bạn chờ hệ thống tạo máy ảo xong sẽ quay trở lại màn hình ban đầu:

wear16Bạn nhấn vào nút màu xanh để Kích hoạt máy ảo Đồng hồ thông minh:

wear17Để thay đổi cách hiển thị Đồng Hồ bạn nhấn thật lâu vào màn hình Đồng Hồ==> chọn loại hiển thị khác:

wear18Khi nhấn thật lâu trên màn hình, hệ thống sẽ hiển thị danh sách các loại đồng hồ, bạn lướt qua trái qua phải rồi nhấn chọn đồng hồ mà bạn thích lúc đó hệ thống sẽ hiển thị đúng loại đồng hồ mà bạn đã chọn.

Để xem và thay đổi các cấu hình trong đồng hồ thông minh (bạn chú ý là nó giống luôn cho thao tác trên Đồng Hồ thật bạn nhé): Bạn nhấn vào góc phải Màn hình Đồng hồ ngay chỗ nút Tắt rồi kéo qua Trái:

wear19Bạn kéo hế qua bên trái thì sẽ có màn hình sau:

wear21Muốn xem cấu hình thì nhấn chọn Settings. Muốn xem các thông số tiếp theo thì bạn lượt xuống hoặc lướt lên màn hình đều có thể xem được.

Ví dụ màn hình Settings:

wear22

Mọi thứ sẽ nằm trong Settings: cấu hình độ sáng tối, cấu hình thay đổi màn hình đồng hồ, font chữ, Blue Tooth, khởi động lại máy, tắt máy, xem cấu hình… tất tần tật đều nằm trong này.

Cũng trong màn hình Settings bạn lướt tới mục About:

wear23Khi nhấn vào About ta có:

wear24Để xem phiên bản của Đồng Hồ ta bấm vào Versions chỗ Tui khoanh màu vàng:

wear25Bạn muốn quay trở về màn hình trước thì chỉ cần lướt qua Phải là xong.

wear26Các lập trình viên phải biết mở chế độ lập trình thì mới có thể Debug được ứng dụng nhen, tại màn hình Settings này các bạn nhấn liên tục 5 lần vào Build number==> hệ thống sẽ báo bạn đã kích hoạt thành công Developer Option. Sau khi bạn thấy thông báo này thì lướt màn hình qua phải để trở về màn hình trước đó (y xì như Đồng Hồ thật nha) :

wear27Sau khi bạn lướt qua phải xong thì mục Develper Option sẽ hiển thị ra như dưới đây:

wear28Bạn nhấn vào Developer Options để cấu hình tiếp nha:

wear29Để lập trình được với Đồng Hồ Thật bạn bắt buộc phải enabled 2 chức năng:

  • ADB Debugging
  • Debug Over Bluetooth

Đồng hồ thật sẽ kết nối với điện thoại thông qua Blue tooth. 2 chức năng trên bạn nhấn vào để nó thành enabled.

Ngoài ra Đồng Hồ thông minh còn nhiều tính năng khác nhau: Đồng bộ dữ liệu với Điện Thoại Thật, cho phép tìm kiếm điện thoại thật (từ đồng hồ bấm Find my phone thì cái điện thoại của ta nó la lối om sòm lên liền), giao tiếp giọng nói ….

wear30Như vậy tới đây Tui đã giới thiệu sơ qua cách sử dụng Đồng hồ thông minh máy ảo, quan trọng nhất là chức năng debug để developer. Các bạn cần chú ý biết cách cấu hình nha (và nó giống luôn cho Đồng hồ thật)

Bây giờ ta qua mục số 3:

3. Cách lập trình và triển khai ứng dụng lên máy ảo

Bây giờ từ Project tạo ở bước 1, Tui sẽ viết một ứng dụng Đồng Hồ Điện Tử để demo cho các bạn cách thức biên dịch và triển khai ứng dụng này lên Đồng hồ thông minh ảo như thế nào (chú ý chỉ đơn thuần là giúp các bạn biết cách biên dịch và triển khai lên máy ảo, đừng quan trọng độ nguy hiểm của project):

Thông thường khi bạn new 1 Project Android Wear thì hệ thống có sẵn TextView và coding sẵn cho ta truy suất tới control này luôn. Để đơn giản Tui sử dụng chính control Textview này mà không hề sửa bất kỳ 1 giao diện nào, giờ bạn vào MainActivity để bổ sung thêm Coding đa tiến trình hẹn giờ như sau:

package com.tranduythanh.donghodientu;

import android.app.Activity;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends Activity {

    private TextView mTextView;
    TimerTask task;
    Timer timer;
    SimpleDateFormat sdf=new SimpleDateFormat(&quot;hh:mm:ss aaa&quot;);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
        stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub stub) {
                mTextView = (TextView) stub.findViewById(R.id.text);
                timer=new Timer();
                timer.schedule(task,0,1000);
            }
        });
        task=new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Calendar calendar=Calendar.getInstance();
                        if(mTextView!=null)
                            mTextView.setText(sdf.format(calendar.getTime()));
                    }
                });
            }
        };

    }
}

Sau đó bạn biên dịch để chạy ứng dụng:

wear33Hệ thống sẽ xuất hiển cửa sổ yêu cầu chọn thiết bị để triển khai:

wear34Bạn chọn Đồng Hồ Thông Minh rồi nhấn OK, đợi hệ thống biên dịch, đóng gói tải lên thiết bị rồi cài đặt sau đó kích hoạt. Sau khi cài đặt xong thì Đồng Hồ sẽ thông báo cài đặt thành công nhấn vào để kích hoạt phần mềm:

wear31Bạn nhấn vào xem kết quả:

wear32Như vậy Bạn đã biết cách coding một project Đồng hồ điện tử cơ bản, cách biên dịch và triển khai nó lên thiết bị máy ảo như thế nào.

Bây giờ Tui qua mục số 4.

4. Cách cấu hình cho điện thoại thật và Moto 360 kết nối được với nhau

  • Đầu tiên bạn cần cài đặt phần mềm Android Wear (có rất nhiều hãng làm, tuy nhiên Tui khuyên các bạn nên sài chính thống giáo của Google)

h1Bạn vào Google Play chọn Phần mềm mà Tui đánh dấu ở trên để cài đặt. Sau khi cài đặt xong phần mềm Android Wear bạn sẽ thấy giao diện như dưới đây:h2Vì Đồng Hồ Thông Minh sử dụng Bluetooth để kết nối nên phần mềm yêu cầu bạn phải mở BlueTooth nếu như nó chưa được kích hoạt. Sau khi bật BlueTooth, phần mềm sẽ yêu cầu ta cấu hình một số thông số:

h3Bạn chọn mặc định rồi bấm Next:

h4Sau đó nhấn nút Accept để chấp nhận cấu hình.

Hệ thống tiến hành tìm kiếm Đồng Hồ Thông minh qua bluetooth:

h5Như hình trên bạn thấy Đồng Hồ Thông Minh thật mà Tui đang sử dụng có tên “MOTO 360 2CF5”, bạn nhấn vào nó để kết nối:

h6Hệ thống sẽ hiển thị mã xác nhận trên điện thoại và cả trên đồng hồ thông minh thật, lúc này bạn nhấn PAIR để kết nối:

h7h8Bạn bấm Next để ra màn hình kết thúc cuối cùng:

h9Như vậy tới đây Tui đã hướng dẫn xong phần kết nối từ Đồng Hồ Thông Minh Thật tới Điện thoại thật. Lúc này hệ thống sẽ tự đồng bộ dữ liệu từ Phone qua Đồng hồ thông minh.

Bây giờ Tui sẽ hướng dẫn mục tiếp theo(quan trọng cho lập trình viên)

5. Cách cấu hình lập trình phần mềm tương tác được với máy thật (Moto 360) thông qua Bluetooth

Bước 1: Để làm được bước này(rất quan trọng), trước tiên bạn phải đưa đồng hồ thông minh thật của bạn về chế độ developer (đã hướng dẫn ở phần máy ảo), bạn cần phải mở Developer nó lên (y xì máy ảo nha), sau đó cho chức năng ADB Debugging và Bluetooth bật lên như đã nói phần trước nha.

Bước 2:

Thiết lập cổng kết nối để forward từ Điện thoại qua đồng hồ. Vì bạn tưởng tượng nó hoạt động như sau này:

h10Ở hình trên Tui vẽ bạn thấy đó, không có cách nào mà từ Coding trong máy tính của bạn có thể làm việc trực tiếp với đồng hồ được mà bạn phải qua bước trung gian: Từ máy tính qua điện thoại(bằng USB hoặc WIFI)==> từ Điện thoại qua Đồng hồ (hiện nay chỉ mới cho kết nối lập trình bằng  BlueTooth)

Vậy thì làm sao lập trình nhỉ? làm sao deploy ứng dụng của mình lên cái đồng hồ thật kia?

Bạn làm các lệnh sau cho tui vào 2 file .bat (2 đứa này lưu vào thư mục platform-tools của android SDK):

h11Lệnh số 1:

adb forward tcp:4444 localabstract:/adb-hub
pause

Lệnh này lưu vào Motor360_Step1.bat

Lệnh số 2:

adb connect 127.0.0.1:4444
pause

Lệnh này lưu vào Motor360_Step2.bat

Sau đó bạn chạy từng file lên (theo thứ tự) chạy Motor360_Step1.bat sau đó chạy Motor360_Step2.bat:

h111Bạn thấy nó báo Connected như vậy tức là đã thành công. Bạn chú ý là lúc này thường thì trên đồng hồ thông minh thật nó sẽ tự động hỏi là bạn có cho phép debugging không? lúc này bạn nhớ bấm OK NHA, nếu không thì sẽ không cho phép đưa phần mềm từ Máy tính vào Đồng hồ được đâu nha.

hxyzHình trên là Tui chụp đồng hồ thật Moto 360 của Tui lúc vừa chạy 2 file bat bên trên: Tại đây bạn chọn OK để cho phép debugging (1 lần), muốn được debugging mãi mãi thì chọn mục Always from this computer.

Bước 3: Kiểm tra phần mềm Android Wear trên điện thoại đã thực sự kết nối chưa và cấu hình cho phép nếu như chưa (thường lần đầu bạn lập trình luôn gặp lỗi này, kết nối được rồi mà tại sao lại không đưa phần mềm từ Máy tính qua Đồng hồ được.

Bước này bạn làm như sau:

h122Tại phần mềm trên bạn nhấn nút Setting mà Tui khoanh đỏ, nó ra màn hình sau:

h12Chắc chắn lần đầu bạn cấu hình không có kết quả như trên, bạn phải cấu hình lại làm sao ra được kết quả như trên là  thành công.

Thứ nhất: Chỗ Device to Debug mặc định ban đầu là chữ Server, bạn nhấn vào nó thì nó xổ ra màn hình cho chọn thiết bị (chính là Đồng hồ thông minh thật mà lúc nãy bạn đã kết nối thành công từ Điện thoại tới nó)

h13Thứ nhì: Chỗ Debugging over blue tooth mặc định ban đầu nó là Disabled, bạn cần nhấn vào nó để nó sáng như vậy, lúc bạn thấy kết quả:

Host: Connected

Target: Connected

Như hình bên trên do chính điện thoại thật và đồng hồ thật mà Tui cấu hình tức là bạn đã thành công. Tới đây từ Android Studio bạn chạy phần mềm thì nó hỏi:

h14Bạn thấy đó, cái đồng hồ thông minh Moto 360 thật của Tui nó sẽ hiển thị ở chỗ chọn thiết bị của Android Studio==> bạn nhấn OK là sẽ cài được phần mềm từ Máy tính qua đồng hồ.

Như vậy Tui đã hướng dẫn đầy đủ và chi tiết từng bước để lần đầu tiên bạn tiếp cận lập trình đồng hồ thông minh như thế nào rồi nhé, bạn chú ý thực hành kỹ lại những hướng dẫn này nhé.

Source code đồng hồ điện tử: http://www.mediafire.com/download/j6i9cde877vfyd5/DongHoDienTu.rar

Chúc các bạn thành công.

Tìm người viết app android help SOS


Tui có người bạn đang cần tìm người viết app android help SOS, giá ~2000USD làm trong 1.5 tháng.  Bạn nào có nhu cầu thì email tới duythanhcse@gmail.com để trao đổi sơ qua kỹ thuật. Đây là nội dung nguyên văn của người bạn muốn tìm người viết ứng dụng SOS:

nội dung : là ứng dụng khi người cài đặt gặp nguy hiểm kêu help , app
sẽ tự chụp ảnh thông báo vị trí , gi âm lại những gì người kêu cứu (
sau khi người dùng kêu cứu vẫn gi âm vừa là bằng chứng để cảnh sát có
thể hổ trợ vừa là động lực giúp người bạn đc tin nhắn xác định xem ng
kêu cứu gặp nguy hiểm đến mức nào ,) để gửi tin nhắn hình ảnh âm thanh
tới các số điện thoại set up sẵn khi cài đặt ứng dụng . tin nhắn ở đây
là tin nhắn được gửi qua 3g hoặc wifi tin nhắn đa phương tiện . , nếu
không có 3g hoặc wifi thì sẽ gửi tin dạng sms . đương nhiên là quá
trình cài đặt để chuyển từ mặt định là tin nhắn đa phương tiện sang
tin nhắn sms khi không có 3g hoặc wifi là khá phức tạp . sau khi gửi
tin về vị trí , gi âm nội dung những gì xảy ra khi người dùng app kêu
cứu . sẽ có 1 cuộc gọi tới số được cài đặt sẵn, đây là cuộc gọi đến có
đổ chuông được gắn định dạng sos , và là cuộc gọi nhỡ.

thiết lập 1 từ help trên toàn thế giới mặc định để app chạy khi người
dùng kêu từ help . nhưng ko bit khi dùng app kêu help có ảnh hưởng tới
phần mêm ok google ko . vì 2 phần mềm này khá giông nhau đều theo tác
vụ âm thanh để chạy .
– ngôn ngữ tiếng anh và tiếng việt ,

– hướng mở rộng . sang cả đồng hồ thông minh hay các thiết bị đeo tay
cảnh báo sức khỏe chạy hệ điều hành android  có thể thông báo khi
người dùng 2 thiết bị trên gặp nguy hiểm . nếu người dùng có thể chấp
nhận 1 chút thiếu an toàn app luôn chạy khi máy khởi động kể cả chưa
mở nut home app sẽ luôn gi âm  ví dụ nói help app sẽ chạy gửi thông
báo cứu  . nói cứu khi chưa mở nút home thì máy cũng thực hiện tác vụ
thông báo cứu tới các số điện thoại mặc định.

– quá trình phập cho người dùng app tự cài đặt số điện thoại, tự xác
nhận tên quốc gia, ví dụ số của việt nam là + 084 , trung quốc là +088
, để xác nhận có số điện thoại đc set up thì có tin nhắn gửi đến số
cần sét up xác nhận .cho người dùng tự cài đặt app sẽ bật khi mở nút
hôm 1 phut hay 2 phút 3 phút app sẽ tự tất cho người dùng trọn khi
thời gian app sử dụng bật nut home. hoặc khi mà có thể xác định đc âm
ng dùng qua tiếng kêu khi ng dùng chưa mơ nút home. thì có thể cho ng
dùng trọn gửi việc để app hoạt động khi nút home chưa mở hay để app
hoặt động khi nut home mở ra. e muốn các tài nguyên khi làm app ko vi phạm điều kiện của google, để đưa ứng dụng lên chợ của google  không bị khóa .và app luôn chạy đc trong điều kiện không có kết nối internet .

 

Học Android qua Video


Để đáp ứng nhu cầu học thêm Android, Tui có nhận lời mời giảng dạy trực tuyến cho Tổ Hợp Công Nghệ Giáo Dục Topica.

Chương trình học Android qua video gồm hơn 33 giờ giảng với nội dung đầy đủ kiến thức từ java cơ bản cho tới Android nâng cao. Bạn nào có nhu cầu thì đăng ký học (chú ý Topica có tính phí). Mỗi bài giảng qua Video Tui đều để lại source code mẫu đầy đủ và các dự án thực tế.

-Các bạn chú ý: để được ưu đãi với giá rẻ nhất các bạn hãy vào facebook đăng ký (giá thường giảm 50%) : https://www.facebook.com/tranduythanhcse/

Link tham gia khóa học qua Video: http://edumall.vn/courses/lap-trinh-android-tu-co-ban-den-nang-cao/detail

linkedumall.PNG

Việc học qua Video sẽ giúp các bạn dễ nắm bắt hơn.

Chúc các bạn thành công.

[Swift] Bài 01. Vài nét về ngôn ngữ lập trình Swift


Swift là một ngôn ngữ lập trình hướng đối tượng (Mọi thứ trong Swift đều là hướng đối tượng, kể cả những giá trị như số 1, 2, 3… cũng là đối tượng). Swift được Apple giới thiệu tại hội nghị WWDC 2014, ngôn ngữ này dùng để phát triển ứng dụng trên iOS và OS X. Trước đây Objective C là “đứa con nối dõi tông đường” của Apple, việc ra đời Swift có thể giúp các lập trình viên dễ dàng tiếp cận hơn, đặc biệt nó là mã nguồn mở (các tài nguyên về Swift ta có thể tải về từ trang https://swift.org/). Apple vẫn chủ ý cho chạy song song 2 ngôn ngữ lập trình Objective C và Swift (nhưng theo Tui trong tương lai có thể Objective C sẽ được an nghỉ ở đâu đó).

object-swift.PNG

Hiện nay Swift được hỗ trợ biên dịch ở 2 hệ điều hành MAC và Ubuntu (14.04 hoặc 15.10 (64 bit) trở lên). Vẫn dùng X-Code để triển khai (Windows thì chưa, tuy nhiên có thể compile trên một số Cloud có hỗ trợ)

Việc nắm vững kiến trúc và cách thức lập trình với Swift rất quan trọng, Swift viết dưới dạng Script. Trong loạt bài hướng dẫn lập trình với Swift Tui sẽ dùng một số trình biên dịch trên Cloud của một số trang như:

  1. https://swiftlang.ng.bluemix.net (cái này của IBM)
  2. http://runswiftlang.com (cái này của Julius Parishy và JayMobile)
  3. http://swiftstub.com (của Skip Wilson)

Việc dùng cloud sẽ tiết kiệm nhiều thứ (dĩ nhiên phải có internet). Khi dùng cloud để biên dịch thì ta không phải mất công cài đặt “lung tung các phụ tùng”. Tui sẽ sử dụng Cloud của IBM để tiến hành biên dịch các mã lệnh của Swift. Trong chuỗi bài hướng dẫn này mục đích của Tui là giúp các bạn làm chủ được ngôn ngữ Swift (khi rành rồi thì bạn có thể sử dụng các IDE nào cũng được, X-Code chẳng hạn).

Việc tiếp cận lập trình liên quan tới ông Táo nó hơi tốn kém(ít dành cho con nhà nghèo- xấu trai – học giỏi). Ví dụ để đủ các thiết bị chính thống giáo test cho sướng thì sơ sơ : 1 máy Mac (1 nùi tiền), 1 IPhone (1 nùi tiền), 1 IPad (1 nùi tiền) … 3 cái nùi này tính đại cũng khoảng 50-60 triệu. “Bia tươi”, Mì gói không có mà ăn lấy tiền đâu ra mà mua. Nhưng cái không có tiền này vẫn không thể ngăn cản được sự đam mệ học hỏi của con nhà nghèo – xấu /đẹp trai – học giỏi…. bằng cách ta đứng trên vai người khổng lồ: Sử dụng các service compiler để minh họa các lệnh Swift giúp chúng ta có cảm giác được sờ mó Swift (coi như là mai phục, luyện nội công, khi nào có tiền thì xung phong luôn … đại khái giống phim kiếm hiệp, chui đại vào bụi nào đó biết đâu lượm được bí kíp võ công).

Chỉ cần một máy tính vô cùng cùi bắp(không quan tâm hệ điều hành nào) + internet+ trình duyệt(không quan tâm loại trình duyệt nào) Ta vẫn làm chủ được Swift (để làm tiền đề lập trình iOS hay những thứ liên quan tới Apple).

Về tài liệu, thì trên https://swift.org/ đã có một cuốn của Apple với định dạng epub. Có nhiều phần mềm để đọc, cách nhanh nhất là sử dụng trình duyệt FireFox (nó có sẵn EPUBReader plugin). Cài nó vào rồi tha hồ đọc tài liệu chính thống của Apple.

Ngoài ra có thể đọc nhiều tài liệu hay khác như (có nhiều trang cho phép tải pdf về, nhưng tài liệu này hay nên thường có bản quyền phải bỏ tiền mua nên đừng có đưa lên lung tung sẽ bị chủ thớt chặt banh xác khóa luôn tài khoản):

  • iOS 9 Programming Fundamentals with Swift
  • Learn Swift on the Mac
  • Pro Design Patterns in Swift
  • iOS Swift Game Development Cookbook, 2nd Edition
  • Beginning Xcode_ Swift Edition, 2nd Edition
  • Swift Essentials
  • Swift Quick Syntax Reference

Bài tiếp theo Tui sẽ nói về kiến trúc ngôn ngữ lập trình Swift (và bạn nhớ là Tui chỉ sử dụng Cloud của IBM để demo mã nguồn)

Nếu các bạn thích vọc thêm thì có thể tìm hiểu Silver để lập trình Swift trên Windows (Visual 2015).

Chúc các bạn thành công.

Tuyển dụng full-time Senior PHP Developer


A Singapore-based company wants to hire a full time Senior PHP Developer can communicate in English as soon as before Feb 25, 2016. Pay is negotiable but we’ve budgeted for 1200-1500 USD per month, pay will commensurate with experience. Developer will also be entitled to yearly performance based bonus. Developer may also have opportunity to manage a small team.

Business Summary:

New web and mobile app development company in HCM helping start-ups realize their technology development goals. This an exciting opportunity for a highly motivated and talented individual to join a new and growing company.
Role: Senior PHP Developer. As a PHP developer, you will be responsible for developing high volume of complex websites/ applications.

The ideal candidate will be proficient in website/app design, development and verification.  They will have excellent communication, facilitation and negotiation skills and be able to interact with internal customers and identify essential requirements.  They will also be able to accurately estimate levels of effort.  The individual must have high quality standards, be adept at object-oriented and web methodologies and have strong problem solving skills with a demonstrated ability to take ownership and drive results
Job Description:

  • Assist in gathering requirements
  • Develop high quality code for high traffic and availability website and applications
  • When requested or a project requires some over-time may be necessary to meet company success
  • When needed meet clients and work with 3rd parties
  • Able to manage, lead, and develop teams

Key Requirements:

  • A Bachelor degree in computer science or related field
  • At least 5 years of strong experiences on PHP Framework
  • Strong knowledge/experiences on OOP, data structure and algorithm
  • Knowledge on high-availability, high-scalability web applications
  • Excellent knowledge on mySQL and Non mySQL databases.
  • JavaScript, Jquery, HTML, DHTML, CSS, others languages are a plus
  • Other Technologies: Linux, Apache/Nginx, Web Services, TCP/IP, SVN…
  • Good English communication
  • Detailed and focused on quality
  • Must be self-motivated and able to achieve results
  • Aptitude to learn quickly and work well within a team environment
  • Be able to manage, lead, and develop team

Other Requirements:

  • Must have 2 professional reference.
  • Must have sample portfolio to support experience.

Position type: 8 Full time months contract, extendable indefinitely with opportunity to become full time (negotiable)

Compensation: Negotiable. Highly competitive with performance incentive if milestones are met.

=================================================================

Please send your CV to duythanhcse@gmail.com if you want to apply this job! My profile: https://duythanhcse.wordpress.com/contact/

Bài 71: Xây dựng Web Service dùng API RESTful Service(phần 4)


Trong bài bài 68bài 69bài 70 các bạn đã hiểu được RESTful cũng như cách thức hoạt động của HttpPost, HttpGet, HttpPut và HttpDelete. Tuy nhiên để tương tác được với nó thì cần cấu hình lên Webserver, cụ thể là IIS, trước đây Tui có hướng dẫn các bạn cách tạo lên somee.com, các bạn có thể xem lại bài hướng dẫn này ở đây

Trong bài này Tui sẽ hướng dẫn các bạn từng bước cài đặt lên IIS Server ở máy local của các bạn, việc test trên máy local cũng khá quan trọng vì khi test hoàn chỉnh xong thì ta mới publish ra ngoài.

Dưới đây là chi tiết từng bước cách dựng IIS Server và cách triển khai FoodServer lên IIS này (Tui setup trên Win 10, 64 bit)

Bước 1: Vào Control panel chọn Programs and Features

h71-0Bước 2: Chọn Turn Windows features on or off:

h71-1Bước 3: Tiến hành lựa chọn để cài IIS Web Server theo màn hình dưới đây:

h71-2Sau khi lựa chọn giống như khung khoanh màu đỏ, nhấn OK để tiến hành cài đặt, tùy thuộc vào máy mà chương trình có thể cài từ 5-10 phút.

Bước 4: Sử dụng IIS Web Server:

Sau khi cài xong IIS Web Server, bạn quay lại màn hình Control panel, bạn sẽ thấy Administrative Tools:

h71-3Bạn click vào biểu tượng Administrative Tools, ta có giao diện tiếp theo:

h71-4Bạn chọn “Internet Information Services (IIS) Manager” như hình trên:

h71-5Trong màn hình quản trị bạn thấy có 2 vùng: Application Pools và Default Web site.

Bước 4.1 Cấu hình Application Pools:

Application Pool là gì?
Application Pool có thể chứa một hoặc nhiều ứng dụng và cho phép chúng ta cấu hình cấp độ giữa các ứng dụng web khác nhau. Ví dụ, nếu bạn muốn cô lập tất cả các ứng dụng web chạy trong cùng một máy, bạn có thể làm điều này bằng cách tạo ra Application Pool riêng biệt cho mỗi ứng dụng web và đặt chúng trong Application Pool tương ứng. Bởi vì mỗi Application Pool chạy trong quá trình làm việc riêng của mình, các lỗi trong Application Pool sẽ không ảnh hưởng đến các ứng dụng đang chạy trong Application Pool khác. Triển khai ứng dụng trong Application Pool là lợi thế chính của IIS trong quá trình làm việc ở chế độ cách ly bởi vì bạn có thể tùy chỉnh Application Pool để đạt được cấp độ tách biệt ứng dụng mà bạn cần.
Khi bạn cấu hình Application Pool để sẵn sàng tối ưu, bạn cũng nên xem xét làm thế nào để cấu hình Application Pool bảo mật ứng dụng. Ví dụ, bạn có thể cần phải tạo ra Application Pool riêng cho ứng dụng đòi hỏi mức độ bảo mật cao, trong khi cho phép các ứng dụng đòi hỏi một mức độ thấp hơn của bảo mật để chia sẻ cùng Application Pool.
Bạn bấm chuột phải vào màn hình Application Pools/ chọn Add Application Pool… như hình dưới đây:h71-6Màn hình tạo mới Application Pool hiển thị lên, ta nhập “FoodServer_Pool” rồi bấm OK:
h71-7Sau khi bấm OK, bạn quan sát:
h71-8Ở màn hình trên bạn tiếp tục chọn Advanced Settings.. cho FoodServer_Pool:
h71-9Bạn cần chỉnh ApplicationPoolIdentity qua LocalSystem.
Bước 4.2: Cấu hình WebService lên IIS Server
Bấm chuột phải vào Default Web Site / chọn Add Application
h71-10
Màn hình hiển thị Add Application:
h71-11Mục Alias (1): Đặt tên cho Service, ở đây ta đặt foodserver
Mục Application pool (2): Nhấn nút Select… và chọn đúng FoodServer_Pool
Mục Physical path (3): Trỏ tới đường dẫn chứa source code của project
Sau đó bấm OK để tạo.
Bạn quan sát kết quả:
h71-12http://localhost/foodserver/api/food chính là kết quả sau khi cấu hình xong. Tới đây hệ thống đã chạy 24/24.
Các bạn có thể dùng Postman và HttpRequester để test HttpPost, HttpGet, HttpPut và HttpDelete.
Các bạn chú ý rằng khi từ Mobile kết nối tới Web Service này thì không thể dùng localhost (vì nó lầm tưởng là của chính mobile), đo dó bạn cần đưa localhost về 1 địa chỉ IP để test.
Cách lấy địa chỉ IP của máy local của ta:
– Nhấn tổ hợp phím có biểu tượng Windows + R để mở cửa sổ Run:
h71-13– gõ lệnh cmd, màn hình command line hiển thị lên, tiếp tục gõ lệnh ipconfig
h71-14Ở trên máy local của Tui có địa chỉ IP: 192.168.100.3
Bây giờ Tui thay thế cho localhost:
h71-15Như vậy ta cũng có được kết quả mong muốn.
Các bạn cố gắng cấu hình để được kết quả như trên.
Bài sau Tui sẽ hướng dẫn cách tương tác từ Mobile Android lên RESTful WebService, các bạn chú ý theo dõi.
Chúc các bạn thành công!

Bài 70: Xây dựng Web Service dùng API RESTful Service(phần 3)


Trong bài này Tui hướng dẫn các bạn cách sử dụng 2 công cụ HttpRequester (firefox addon) và Postman (chrome addon) . Các bạn cần nắm rõ bài 68bài 69 để hiểu và triển khai được Web API RESTful.

  1. Cách sử dụng HttpRequester.

Bạn mở trình duyệt Firefox, vào google tìm từ khóa “httprequester addon” hoặc vào link: https://addons.mozilla.org/en-US/firefox/addon/httprequester/, bạn nhấn Add to Firefox:

h70-0Bạn tiến hành cài, cài xong khởi động lại trình duyệt Firefox, nhìn vào góc phải trên cùng trình duyệt:

h70-1Bạn bấm vào biểu tượng đó, chương trình HttpRequester sẽ xuất hiện như hình dưới đây:

h70-2Mục URL: Nhập URL Web API của bạn vào (http://localhost:8888/api/food). Bạn nhấn GET, chương trình sẽ lấy toàn bộ danh sách Food vào màn hình bên phải (bạn quan sát sẽ thấy).

Để Test lấy 1 Food theo mã nào đó bạn làm như sau:

h70-3Bạn vào tab Parameters, nhập tên biến + giá trị rồi nhấn Add. Sau đó bấm nút GET để lấy dữ liệu, như bạn quan sát đó Tui nhập id=15 thì chương trình lấy ra được Food “Hột mít vùi tro”.

-Test HTTP POST:

h70-4Đối với POST bạn cũng vào Parameters, nhập đủ parameters (phải giống như viết trong Web API), sau đó nhấn nút “POST”, bạn thấy kết quả trả về là true—> tức là thêm thành công. Bạn có thể test lại chức năng HTTP GET để xem lại kết quả thêm mới này.

Trường hợp PUT tương tự bạn tự làm.

Giờ Tui làm tiếp trường hợp Delete:

h70-5Trong combobox, bạn chọn DELETE, nhập Parameter rồi bấm Submit, thấy kết quả là true==> xóa thành công.

2.Cách sử dụng Postman.

Mở trình duyệt Chrome, tìm từ khóa “postman plugin”, hoặc https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en tiến hành cài đặt, sau khi cài thành công:

h70-6Kích hoạt postman để sử dụng.

Để lấy toàn bộ dữ liệu (HttpGet) ta chọn Get như hình dưới đây:

h70-7Để lấy 1 Food theo mã ta làm theo các bước dưới đây (Ví dụ lấy Food có id=1):h70-8Để sử dụng HttpPost (tạo Food mới) ta làm theo các bước dưới đây:

h70-9Ở trên khi bấm Send, trả về true==> thêm Food thành công.

Để xóa một Food có mã bất kỳ:

h70-10Trên đây là cách sử dụng HttpRequesterPostman, 2 công cụ này rất hiệu quả giúp chúng ta kiểm tra quá trình thực hiện HttpPost,HttpGet,HttpPut,HttpDelete trước khi triển khai vào hệ thống thực.

Chúc các bạn thành công.

Bài 69: Xây dựng Web Service dùng API RESTful Service(phần 2)


Trong bài này Tui sẽ hướng dẫn chi tiết cách tạo Web API (lý thuyết ở đây), cách cấu hình IIS, cách sử dụng công cụ Postman(với những ai dùng chrome), cách sử dụng HttpRequester (với những ai dùng Firefox). PostmanHttpRequester là một trong những công cụ hiệu quả nhất để TEST coding của ta, nếu code của ta pass qua được công cụ này thì có thể kết luận rằng Webservice của ta chắc chắn hoạt động tốt.

Để cho có cảm giác Tui sẽ tạo một cơ sở dữ liệu SQL Server, WebAPI sẽ tương tác dữ liệu này bằng cách sử dụng LinQ to SQL:

Bước 1: Tạo cơ sở dữ liệu tên “dbFood”, có một bảng “Food” gồm 4 cột (id để auto) như dưới đây:

h69-0Các bạn có thể tải SQL Script ở đây để tạo CSDL cho lẹ: http://www.mediafire.com/download/48dkwoqka2e1w07/dbFood.sql

Bước 2: Tiến hành viết Web API

Để tạo Project sử dụng Web API có nhiều cách tạo, ở đây Tui sử dụng cách đơn giản nhất để các bạn bớt rối.

Từ Visual Studio 2013 vào menu File/chọn new/ chọn Project:

h69-1Sau khi chọn Project, màn hình sau xuất hiện:

h69-2Chọn các cấu hình như trên, đặt tên Project là “FoodServer” rồi nhấn OK.

Project mặc định ban đầu như sau:

h69-3Giờ ta tiến hành tạo LinQ to SQL cho CSDL dbFood để dễ xử lý như sau:

Bấm chuột phải vào Project/ chọn :

h69-4Màn hình tạo tên LINQ to SQL hiển thị lên, ta tạo tên rồi nhấn OK:

h69-5(chú ý đôi khi bạn sẽ không thấy LINQ to SQL Classes ở màn hình này), nếu không thấy thì chọn New Item:

h69-6Ta chọn các mục giống như bên dưới, tìm tới LINQ to SQL Classes rồi đặt tên DBFood tương tự như trên:

h69-7Cả 2 cách cuối cùng cũng trạo được DBFood LINQ như sau:

h69-8– Ta tiến hành cấu hình để kéo Cơ sở dữ liệu vào làm các lớp tương tác:

Bạ mở Server Explorer (vào menu View/Server Explorer), bấm chọn theo các bước như bên dưới (lệ thuộc vào Server của bạn mà chọn Server name, User đăng nhập cho phù hợp):

h69-9Khi khi bấm OK, bạn sẽ thấy Server Explorer có thêm mục sau:

h69-10Bạn kéo thả bảng Food vào mục bên phải như hình trên.

Tiếp theo bạn tạo 1 thư mục (tên gì cũng được), ở đây Tui đặt đại tên Controllers (bấm chuột phải vào Project/chọn Add/chọn New Folder):

h69-11Sau khi thư mục Controllers được tạo ra, bạn bấm chuột phải vào Thư Mục này rồi chọn Add/Controller..:

h69-12Sau khi bạn chọn Controller… màn hình sau xuất hiện:

h69-13Ta chọn Web API 2 Controller – Empty rồi bấm Add, Visual sẽ hiển thị màn hình đặt tên cho Controller:

h69-14Mặc định là chữ Default, bây giờ bạn đổi lại thành Food (thường ta làm API cho bảng nào thì lấy tên bảng đó), đó là lý do vì sao Tui đặt là Food:

h69-15Tập tin FoodController.cs sẽ được tạo ra, nhưng ta chỉ lấy Food(bỏ chữ Controller đằng sau đi) để tương tác (đây là cơ chế hoạt động). Ta xem cấu trúc Controller được tạo ra:

h69-16Cấu trúc có gì?

  • File WebApiConfig.cs được sinh ra trong thư mục App_Start, bạn để ý  routeTemplate: “api/{controller}/{id}”, tức là khi ta dùng thì viết: “api/food” để lấy toàn bộ danh sách, hay “api/food/3” để lấy chi tiết  1 Food có mã là 3.
  • File FoodController.cs kế thừa từ ApiController

Bây giờ ta tiến hành viết các chức năng (viết trong file FoodController.cs) :

  • HttpGet: Truy vấn thông tin
  • HttpPost: Thêm mới thông tin
  • HttpPut: Thay đổi thông tin
  • HttpDelete: Xóa thông tin

Trước tiên ta làm HttpGet:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace FoodServer.Controllers
{
public class FoodController : ApiController
{
///

<summary>
/// Dịch vụ lấy toàn bộ Food
/// </summary>


/// <returns></returns>
[HttpGet]
public List<Food> GetFoodLists()
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.ToList();
}
///

<summary>
/// Dịch vụ lấy 1 Food theo khóa chính nào đó
/// </summary>


/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public Food GetFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
}
}

Chú ý là Web API nó không quan tâm tới tên phương thức (viết tên gì cũng được, nó tự động lấy chính xác Service yêu cầu), (không cho phép trùng tên biến). Ví dụ nếu bạn cố tình tạo thêm 1 hàm:


[HttpGet]
public Food GetFood_test(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}

Khi chạy sẽ báo lỗi ngày (vì hệ thống không quan tâm tên hàm), nó thấy 2 biến id giống nhau ở trên 2 hàm nó sẽ không biết dùng cái nào (vì chúng cùng nhóm HttpGet). Cụ thể là lỗi sau:

Multiple actions were found that match the request:
GetFood on type FoodServer.Controllers.FoodController
GetFood_test on type FoodServer.Controllers.FoodController

Tiếp theo ta viết HttpPost (thêm mới):


///

<summary>
/// Dịch vụ này để thêm mới 1 Food, các thông số gửi từ client lên
/// </summary>


/// <param name="name">tên </param>
/// <param name="type">loại-nhóm</param>
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
[HttpPost]
public bool InsertNewFood(string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
food.name = name;
food.type = type;
food.price = price;
db.Foods.InsertOnSubmit(food);
db.SubmitChanges();
return true;
}
catch
{
return false;
}
}

Để chỉnh sửa thông tin ta viết HttpPut:


///

<summary>
/// Dịch vụ chỉnh sửa thông tin
/// </summary>


/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
/// <returns></returns>
[HttpPut]
public bool UpdateFood(int id,string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
food.name = name;
food.type = type;
food.price = price;
db.SubmitChanges();//xác nhận chỉnh sửa
return true;
}
catch
{
return false;
}
}

Cuối cùng để xóa 1 Food ta viết HttpDelete như sau:


///

<summary>
/// Dịch vụ dùng để xóa Food có id
/// </summary>


/// <param name="id">id muốn xóa</param>
/// <returns></returns>
[HttpDelete]
public bool DeleteFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
db.Foods.DeleteOnSubmit(food);
db.SubmitChanges();
return true;
}

Sau cùng ta có coding tổng hợp của FoodController như sau:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace FoodServer.Controllers
{
public class FoodController : ApiController
{
///

<summary>
/// Dịch vụ lấy toàn bộ Food
/// </summary>


/// <returns></returns>
[HttpGet]
public List<Food> GetFoodLists()
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.ToList();
}
///

<summary>
/// Dịch vụ lấy 1 Food theo khóa chính nào đó
/// </summary>


/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public Food GetFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
return db.Foods.FirstOrDefault(x => x.id == id);
}
///

<summary>
/// Dịch vụ này để thêm mới 1 Food, các thông số gửi từ client lên
/// </summary>


/// <param name="name">tên </param>
/// <param name="type">loại-nhóm</param>
/// <param name="price">đơn giá</param>
/// <returns>true thành công, false thất bại</returns>
[HttpPost]
public bool InsertNewFood(string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
Food food = new Food();
food.name = name;
food.type = type;
food.price = price;
db.Foods.InsertOnSubmit(food);
db.SubmitChanges();
return true;
}
catch
{
return false;
}
}
///

<summary>
/// Dịch vụ chỉnh sửa thông tin
/// </summary>


/// <param name="id">mã food muốn sửa</param>
/// <param name="name">tên mới</param>
/// <param name="type">loại mới</param>
/// <param name="price">giá mới</param>
/// <returns></returns>
[HttpPut]
public bool UpdateFood(int id,string name,string type,int price)
{
try
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x=>x.id==id);
if (food == null) return false;//không tồn tại false
food.name = name;
food.type = type;
food.price = price;
db.SubmitChanges();//xác nhận chỉnh sửa
return true;
}
catch
{
return false;
}
}
///

<summary>
/// Dịch vụ dùng để xóa Food có id
/// </summary>


/// <param name="id">id muốn xóa</param>
/// <returns></returns>
[HttpDelete]
public bool DeleteFood(int id)
{
DBFoodDataContext db = new DBFoodDataContext();
//lấy food tồn tại ra
Food food = db.Foods.FirstOrDefault(x => x.id == id);
if (food == null) return false;
db.Foods.DeleteOnSubmit(food);
db.SubmitChanges();
return true;
}
}
}

Bây giờ ta tiến hành cấu hình Port để test trên IIS express hoặc bạn cấu hình IIS full. Trong bài này Tui hướng dẫn cách sử dụng IIS Express.

Bạn bấm chuột phải vào FoodServer Project/ chọn Properties:

h69-17Tại màn hình Properties / chọn mục Web:

h69-18Bạn cấu hình như trên, Port tui chỉnh là 8888, bạn chọn Port nào cũng được, nhưng thường là 4 chữ số.

Sau đó bấm Create Virtual Directory:

h69-19Nếu Visual thông báo màn hình trên coi như bạn thành công.

Bây giờ ta thử chức năng HttpGet để lấy toàn bộ Food và lấy 1 Food theo id bất kỳ:

F5 để chạy Project:

h69-20Bạn chỉnh lại: http://localhost:8888/api/food để lấy toàn bộ Food:

h69-21Để lấy 1 Food có mã bất kỳ:

Ví dụ: Lấy Food có mã id=15: http://localhost:8888/api/food/15

h69-22Hoặc: http://localhost:8888/api/food?id=15

h69-23Ta cần phải biết các công cụ để test HttpGet,HttpPost,HttpPutHttpDelete.

Bài kế tiếp Tui sẽ hướng dẫn cách dùng công cụ Postman và HttpRequester để xử lý 4 tác vụ trên.

Bây giờ các bạn hãy làm theo hướng dẫn này để có thể tạo được 1 Web API hoàn chỉnh, test trước phần HttpGet mà Tui đã trình bày ở trên trước.

Các bạn tải source code FoodServer ở đây: http://www.mediafire.com/download/c24sm4hg19v8grz/FoodServer.rar

Chúc các bạn thành công.

Follow

Get every new post delivered to your Inbox.

Join 1,237 other followers

%d bloggers like this: