Hôm nay, mình xin giới thiệu với các bạn bài viết về chụp hình. Mình sẽ hướng dẫn các bạn các câu lệnh để chụp hình và lấy hình chụp được gán vào ImageView. Hy vọng bài viết này sẽ làm các bạn thích thú hơn về Android.
Bây giờ chúng ta bắt đầu:
Đầu tiên chúng ta thiết kế 1 giao diện gồm: 1 ImageView, 1 Button dùng để chụp hình, 1 Button dùng để làm hình nền.
Tiếp theo, qua file java ta khai báo các biến:
Button chuphinh; Button lamhinhnen; Bitmap bm; ImageView hinhnen;
Khi xử lý ta cần phải có 1 đối tượng Bitmap để nhận dữ liệu hình ảnh từ máy chụp hình do đó ta cần khai báo 1 đối tượng Bitmap tên bm và nhúng thư viện cho nó.
Sau đó bắt sự kiện cho nút “chuphinh”:
chuphinh = (Button) findViewById(R.id.button1); chuphinh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent im = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(im, 3000); } });
Trong hàm click của nút “chuphinh” ta tạo ra 1 intent để gọi hành động chụp hình sau đó chạy Activity đó với hàm startActivityForResult để activity chụp hình chạy xong sẽ trả về dữ liệu cho chương trình của ta. Trong hàm ta truyền vào 1 intent và 1 con số được xem là requestCode, ở đây ta lấy đại 1 số vd:3000. Sau đó ở hàm xử lý việc trả về ta phải test xem requestCode có phải là 3000 hay không. Việc này để cho phép ta gọi nhiều intent để xử lý, mỗi intent có 1 requestCode khác nhau. Khi trả về dựa vào requestCode ta sẽ biết dữ liệu đó trả về từ đâu.
Tiếp theo ta chọn chuột phải vào Source -> Override/Implement Methods… -> onActivityResult -> OK. Rồi viết:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && requestCode == 3000) { Bundle extras = data.getExtras(); bm = (Bitmap)extras.get("data"); hinhnen.setImageBitmap(bm); } }
Hàm này chính là hàm xử lý khi có dữ liệu trả về từ 1 activity khác. Trong hàm đầu tiên ta xét resultCode có thành công hay không, tiếp theo ta xét requestCode có bằng 3000 không (3000 chính là con số tự đặt ra ở trên hàm gọi activity). Tạo 1 đối tượng Bundle và lấy dữ liệu từ Intent về. gọi hàm get truyền vào “data” sẽ trả về một Bitmap. Đưa bitmap được nhận về cho ImageView để gán hình nền cho nó.
Để có thể gán ảnh nền cho thiết bị ta cần phải cấp quyền dạng “User Permission” với quyền “SET_WALLPAPER” trong file AndroidManifest:
Bây giờ chúng ta bắt sự kiện cho nút làm hình nền:
lamhinhnen = (Button) findViewById(R.id.button2); lamhinhnen.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") public void onClick(View v) { WallpaperManager mywall = WallpaperManager.getInstance(getApplicationContext()); try { mywall.setBitmap(bm); } catch(IOException e) { e.printStackTrace(); } } });
Bây giờ các bạn có thể chạy thử và xem kết quả trên máy thật. Các bạn tải Tại Đây