[Android] Hàm hẹn giờ thực thi method

Các bạn có bao giờ thắc mắc có những ứng dụng bạn đang sử dụng một thời gian nhất định thì ứng dụng tự động xuất hiện quảng cáo. Thực tế code rất đơn giản, có 2 cách code hẹn giờ thực thi method, tôi sẽ giới thiệu trong bài này:
Cách 1: Đoạn code hẹn giờ ở dưới chỉ thực thi 1 lần mà thôi
Trong source java bạn chèn dòng code hẹn giờ này vào chỗ bạn gọi hàm thực thi mà bạn cần hẹn giờ:
Đoạn code 1
new Timer().schedule(new TimerTask() {
    @Override    public void run() {
        // this code will be executed after 10 minutes        
        handler.sendEmptyMessage(0);
    }
}, 1000 * 60 * 10);
Ý nghĩa của của Đoạn code 1 là 10 phút tới sẽ gọi thực thi method của bạn
Ta để ý tham số thứ nhất TimerTask() của hàm Timer().schedule() là kiểu Runable nên bắt buộc khi override hàm run() của TimerTask() này hãy khai báo đối tượng của android.os.Handler và chứa các đối tượng UI vào đó và chèn đối tượng của android.os.Handler  để override hàm run() của TimerTask().
VD: handler trong handler.sendEmptyMessage(0); ở trong Đoạn code 1  được khai báo như sau:
Đoạn code 2:
Handler handler = new Handler() {
    @Override    public void handleMessage(Message msg) {
        // Chèn method có chứa các đối tượng UI vào đây
    }
};
Tham số thứ hai 1000 * 60 * 10 là giá trị thời gian có đơn vị là mili giây, trong Đoạn code 1 tôi để thời gian là 10 phút.
Cách 2: Đoạn code hẹn giờ ở dưới sẽ thực thi liên tục theo thời gian đã định, tức là bạn định nghĩa cứ 10 phút thực thi method thì cứ sau 10 phút nó thực thi method, liên tục như vậy khi thoát chương trình.
Bạn sử dụng đoạn code
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(new Runnable()
{
    @Override    public void run()
    {
        handler.sendEmptyMessage(0);
    }
}, 0, 2, TimeUnit.SECONDS);
Ý nghĩa đoạn code này là thực thi handler.sendEmptyMessage(0) lần đầu tiên lúc 0 đơn vi thời gian, lần thứ 2 trở đi cứ 2 đơn vị thời gian thực thi hàm handler.sendEmptyMessage(0) , TimeUnit.SECONDS  định nghĩa đơn vị thời gian là GIÂY.
Như vậy tôi đã giới thiệu hàm hẹn giờ thực thi method. Hy vọng bài viết giúp ích cho bạn.

[Android] Mẹo luôn hiển thị keyboard lúc mới vào Activity mà không tác động vào các input control

Để hiển thị keyboard khi mới vào Activity mà không tác động vào các input control, ta làm như sau:
Vào file AndroidManifest.xml, thêm code android:windowSoftInputMode="stateVisible"  này vào tag Activity mình cần hiện.
Ví dụ tôi muốn hiển thị bàn phím khi vào Activity ManHinhChinhActivity ta sẽ có đoạn code như sau trong file AndroidManifest.xml:
<activity android:name=".ManHinhChinhActivity" android:windowSoftInputMode="stateVisible"/>

[Android] Cách để hiển thị menu trên action bar

Để hiển thị các item của menu trên action bar (hình 1)
Hình 1
Ta chèn đoạn code được đóng khung đỏ ở hình 2 là OK.

Hình 2

Cách trị no resource found trong file values-v23.xml sau khi cập nhật SDK tool trong Android Studio

Nếu như gặp phải lỗi như hình 1 khi ta tạo project mới sau khi cập nhât SDK tool thì các làm như sau:
Hình 1

  1. Mở SDK Manager lên và đánh dấu kiểm vào SDK Platform của Android 6.0 (API 23) để cài đặt.
  2. Sau khi cài xong, đóng SDK Manager. Vào project mở file build.gradle (Module:app) lên.
  3. Sửa trị số đằng sau compileSdkVersion thành 23 và buildToolsVersion thành "23"
  4. Sync lại trang gradle này.
  5. Vậy là xong.

Xử lý lỗi "Failed to lock the file" khi mở file vmware

Khi bạn mở file vmware mà gặp phải lỗi
Failed to lock the file
Cannot open the disk '/path to file/xxx.vmx' or one of the snapshot disks it depends on.
Module DiskEarly power on failed.
Failed to start the virtual machine
thì giải quyết bằng cách xóa tất cả các file *.lck trong thư mục chứa file xxx.vmx là xong.

Làm quen MAC OS X (Updating)

Mới cài MAC OS X trên VMWare để lập trình iOS. Ngày trước quen dùng Windows OS nên khi chuyển sang MAC OS có hơi bỡ ngỡ vì thế tui viết bài này để khi nào rảnh có quên thì quay lại xem :)

I. Bật bộ gõ tiếng việt
Trên thanh Stardock (hình 1.1)
Hinh 1.1 - Thanh stardock cua Mac OS X

Click vào biểu tượng của System Preferences () sẽ xuất hiện bảng hộp thoại System Preferences (hình 1.2)
Hinh 1.2 - Màn hình System Preferences

Click vào Keyboard sẽ xuất hiện bảng hộp thoại Keyboard và sau đó click vào tab Input Sources  (hình 1.3).
Hình 1.3 - Màn hình Keyboard
Click  sẽ xuất hiện dialog Browse using language and select an input source to add, ở panel bên trái chọn Vietnamese, panel bên phải chọn Telex (vì tui quen kiểu gõ này, ai quen kiểu gõ nào thì chọn kiểu gõ ấy) và nhấn nút Add (hình 1.4).
Hình 1.4 - Dialog Browse úing language and select an input source to add
Ở góc bên phải của thanh Topdock Mac (hình 1.5)


Hình 1.5 - Góc bên phải của thanh Topdock của Mac OS X
Click vão biểu tượng. Sau đó chọn Telex (hình 1.6) để chuyển sang chế độ gõ Telex tiếng việt.
Hình 1.6 - Màn hình lựa chọn bộ gõ
Vậy là chúng ta có thể gõ được tiếng việt rồi đó.
Để chuyển đổi qua lại giữa bộ gõ tiếng việt và tiếng anh bằng phím tắt ta làm như sau:
Ở màn hình Keyboard (hình 1.3) click vào tab Shortcuts, ở panel bên trái chọn Input Sources, panel bên phải đánh dấu tick hết các ô checkbox (hình 1.7).
Hình 1.7 - Giao diện tab Shortcuts của màn hình Keyboard
Xong. Để chuyển đổi bộ gõ qua lại ta nhấn tổ phím  + Shift + Space

II. Tổ hợp phím tắt chụp màn hình

  • Chụp toàn màn hình:  + Shift + 3
  • Chụp một vùng trên màn hình:  + Shift + 4
Sau khi chụp xong sẽ xuất hiện file *.png trên Desktop

III. Một số tổ hợp phím tắt thông dụng

  • Copy:  + C
  • Paste:  + V
  • Undo:  + Z
  • Đặt con trỏ chuột văn bản ở đầu dòng:  + !
  • Đặt con trỏ chuột văn bản ở cuối dòng:  + "
  • Bôi đen dòng văn bản từ vị trí con trỏ chuột văn bản tới đầu dòng:  + Shift + !
  • Bôi đen dòng văn bản từ vị trí con trỏ chuột văn bản tới cuối dòng:  + Shift + "
  • Trong Safari, để mở tab mới thì nhấn tổ hợp phím  + T
  • ...
IV. Tổ hợp phím dùng cho XCode

  • Mở bảng hộp thoại Choose a template for your new file (hình 4.1):  + N

    Hình 4.1 - Bảng hộp thoại Choose a template for your new file trong XCode
  • ......
V. Những cái hay khi sử dụng MAC OS

  • Khi download file nén bằng safari thì khi download song ta được thư mục đã được giải née của file nén mà ta download về (đỡ cho chúng ta về thời gian giải nén)
  • Trong Xcode, trong đoạn code mà xuất hiện warning thì trong warning có kèm theo gợi ý fix bug (hình 5.1), rất tiện cho người lập trình ;)

Hình 5.1 - Warning có kèm theo gợi ý fix bug trong Xcode

--- Tạm thời như vậy đã, sẽ còn tiếp :) ---
        

Sửa lỗi I/O Error: Unable to open sync connection! khi run app trên device trong android studio

Nếu bạn dính lỗi này (hình 1) khi run build app trên device (cụ thể device của tôi là Sony Erricson Neo V - M11i - Bản Android 4.0.4)
Hình 1
thì cách sửa như sau:
vào Settings > Applications > Development > USB debugging (Hình 2)
Hình 2
Uncheck rồi check lại ở USB debugging.
Xong rồi, giờ run lại thôi, nếu không được nữa thì .......................... chúng ta sẽ nghiên cứu sau :P


Hướng dẫn tích hợp Google Apps 4.4.2 vào Genymotion 2.2

Genymotion là phần mềm tạo lập máy ảo Android, khi bạn tương tác với máy ảo Android đó bạn sẽ cảm thấy giống như bạn đang tương tác trên thiết bị thật. Genymotion là sự lựa chọn tốt nhất thay thế AVD mặc định của Android SDK khi lập trình ứng dụng Android. 
Chúng ta hãy so sánh Genymotion đối với AVD của Android SDK nhé (cái này là theo kinh nghiệm sử dụng Genymotion của mình, có gì sai sót thì các bạn phản hồi lại cho mình nhé)
Ưu điểm
  • Genymotion khởi động nhanh hơn rất nhiều
  • Xử lý trên Genymotion nhanh hơn
  • Cho phép cài đặt và sử dụng các ứng dụng Google Apps như Gmail, Google Play, Hangout, ….
  • Tự động kết nối tới Android SDK, cho nên lúc lập trình Android, khi chúng ta run app sẽ tự động nhận diện máy ảo Genymotion.
Nhược điểm
  • Không thể gửi tin nhắn và gọi điện thoại qua lại giữa các Virtual Device của Genymotion với nhau.
Hôm nay mình sẽ hướng dẫn cài đặt gói Google Apps cho Virtual Device dùng platform Android 4.4.2 trên Genymotion 2.2.
Gói cài đặt Google Apps gồm các ứng dụng mà Google phát triển là Google Play, GmailHangout, … 
Genymotion ở các phiên bản trước 2.0+ thì đều tích hợp các Google Apps, từ phiên bản 2.0 trở về sau thì không còn tích hợp các Google Apps nữa. Mình cũng không biết vì sao lại vậy nhưng không sao, chúng ta sẽ cài đặt thủ công.
Bước 1: Chuẩn bị "hàng"
Genymotion ARM Translation 1.1 – Download tại trang http://filetrip.net/dl?4SUOrdcMRv (ta được file Genymotion-ARM-Translation_v1.1.zip)
Google Apps 4.4.2 - Download tại trang http://www.androidfilehost.com/?fid=23311191640114013 (ta được file gapps-kk-20140105-signed.zip)
Bước 2: Cài đặt Google Apps
Mở Virtual Device (Virtual Device Machine này sử dụng phiên bản Android 4.4.2) của Genymotion lên, VD: Mình mở Google Nexus 10 dùng bản Android 4.4.2. Sau khi Virtual Device khởi động xong, mở khóa (hình 1)
Hình 1
Kéo thả Genymotion-ARM-Translation_v1.1.zip vào Virtual Device, xuất hiện bảng hộp thoại như hình 2
Hình 2
Nhấn OK và chờ nó transfer, sau khi transfer xong xuất hiện thông báo yêu cầu khởi động lại máy (hình 3)
Hình 3
Nhấn OK, tắt Virtual Device rồi trên màn hình Genymotion for personal use, click vào Virtual Device vừa tắt lúc nãy và nhấn nút Play để chạy Virtual Device đó lên (hình 4)
Hình 4
Sau khi khởi động xong, mở khóa và kéo thả gapps-kk-20140105-signed.zip vào Virtual Device, xuất hiện bảng hộp thoại như hình 5
Hình 5
Nhấn OK và chờ nó transfer, sau khi transfer xong xuất hiện thông báo yêu cầu khởi động lại máy (hình 6)
Hình 6
Nhấn OK, tắt Virtual Device rồi trên màn hình Genymotion for personal use, click vào Virtual Device vừa tắt lúc nãy và nhấn nút Play để chạy Virtual Device đó lên (hình 4)
Lúc khởi động sẽ xuất hiện hộp thoại thông báo Android đang nâng cấp (hình 7). 
Hình 7
Sau khi khởi động xong, mở khóa, ta thấy xuất hiện hộp thoại như hình 8 thì cũng không cần bận tâm, nhấn OK để tắt thông báo này đi.
Hình 8
Bước 3: Cấu hình tài khoản google
 Trên màn hình Virtual Device nhấn nút , xuất hiện màn hình ứng dụng (hình 9)
Hình 9
Click vào nút Settings, xuất hiện màn hình Settings và click vào Add Acount tại mục Accounts (hình 10)
Hình 10
Xuất hiện màn hình Add an account, click chọn Google (hình 11)
Hình 11
Xuất hiện màn hình Add an Google Account và có 2 nút tại đây là Existing và New (hình 12). Nếu bạn đã có tài khoản google rồi (VD: tài khoản google của tôi là cudem.it@gmail.com) thì click vào nút Existing, còn chưa có thì bạn click vào nút New để tạo tài khoản google mới.
Hình 12
Chúng ta click nút Existing (giả sử ở đây chúng ta đã có tài khoản google rồi), xuất hiện màn hình Sign Up yêu cầu nhập email và password để xác nhận, sau khi nhập xong nhấn nút mũi tên hướng phải để tiếp tục (hình 13)
Hình 13
Xuất hiện bảng thông báo yêu cầu bạn đồng ý với điều khoản của Google (hình 14), nhấn OK để tiếp tục.
Hình 14
Xuất hiện màn Google Services (hình 15), chúng ta cứ để mặc định và nhấn nút mũi tên hướng phải để tiếp tục.
Hình 15
Như vậy là ta đã thêm thành công tài khoản Google trên máy ảo Genymotion. Từ giờ bạn có thể vào ứng dụng Google Play để download bất cứ ứng dụng nào mà bạn muốn. Hy vọng bài viết này giúp ích được ít nhiều cho các bạn. Thân ái và hẹn gặp lại vào bài sau cool.

Cách mở exists project trong NetBeans

Nếu bạn đã gặp phải lỗi này khi thêm project với source đã tồn tại (hình dưới) thì cách giải quyết như sau:
Bạn vào source mà bạn muốn add vào trong netbean và xóa thư mục nbproject và restart netbean và add lại source đó là OK.

Phần mềm test USB Boot

Download phần mềm tại đây https://docs.google.com/file/d/0B_g6XB91JjXBWVY1UVVoNF80WU0/edit
Giải nén ra và chạy file exe bằng quyền Administrator và làm theo hình 1
 7.
Hình 1 - Giao diện thực thi của ứng dụng Ultimate Boot USB

Sau khi nhấn test USB thì nó sẽ hiển thị màn hình như chúng ta đang trong màn hình boot, nếu USB của bạn tích hợp Hiren boot thì nó sẽ hiển thị màn hình như hình 2 sau khi nhấn nút Test USB (hình 1)

8.
Hình 2 - Màn hình test USB boot Hiren boot

Bài viết nổi bật

[Android] Hàm hẹn giờ thực thi method

Các bạn có bao giờ thắc mắc có những ứng dụng bạn đang sử dụng một thời gian nhất định thì ứng dụng tự động xuất hiện quảng cáo. Thực tế cod...