Sử dụng Camera trong Android
Bài đăng này đã không được cập nhật trong 3 năm
Có 2 cách để sử dụng camera trong ứng dụng của chúng ta:
- Sử dụng ứng dụng camera có sẵn của android.
- Trực tiếp sử dụng API camera cung cấp bởi android.
Ở ví dụ này sẽ sử dụng camera có sẵn trong android. Anh chị em cùng thực hành cùng tôi để hiểu hơn về cách để sử dụng ứng dụng camera có sẵn của android. Chúng ta sẽ dùng MediaStore.ACTION_IMAGE_CAPTURE để khởi động camera có sẵn trên điện thoại với cú pháp như sau:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Ngoài cái intent trên còn có các intent được cung cấp bởi MediaStore như:
- ACTION_IMAGE_CAPTURE_SECURE: Nó trả về hình ảnh đã được chụp từ camera
- ACTION_VIDEO_CAPTURE: Nó gọi tới ứng dụng video trong android để quay video
- EXTRA_SCREEN_ORIENTATION: Nó sử dụng để cài đặt orientation của màn hình sang vertical hay landscape
- EXTRA_FULL_SCREEN: Nó dùng để control giao diện của ViewImage
- INTENT_ACTION_VIDEO_CAMERA: Dùng để khởi động camera trong chế độ video.
- EXTRA_SIZE_LIMIT: Cái này tôi cũng chưa tìm hiểu được rõ ràng lắm.
Giờ chúng ta sẽ sử dụng function startActivityForResult() để khởi động activity và đời result. Cú pháp như sau:
startActivityForResult(intent,0)
Phương thức này được định nghĩa trong lớp activity. Chúng ta gọi nó từ main activity. Có nhiều phương thức được định nghĩa trong activity class cũng làm việc giống vậy, nhưng sử dụng khi bạn không gọi từ activity nhưng từ nơi khác.
- startActivityForResult(Intent intent, int requestCode, Bundle options): Nó bắt đầu một activity, trong một số trường hợp chúng ta có thể mong đợi một số dữ liệu từ activity được tạo ra.
- startActivityFromChild(Activity child, Intent intent, int requestCode): Nó khởi động activity khi activity của chúng ta là con của bất kỳ activity nào khác.Ok
- startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options): Nó làm việc giống như thằng trên nhưng nó có thể tạo extra values trong shape của bundle.
- startActivityFromFragment(Fragment fragment, Intent intent, int requestCode): Nó khởi động activity từ fragment.
- startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options): Không chỉ khởi động activity từ fragment mà còn tạo extra values.
Ví dụ làm sao để sử dụng ứng dụng camera có sẵn của android và lưu ảnh dưới dạng bitmap:
Để chạy ví dụ này chúng ta cần có một thiết bị thực tế có camera.
- Sửa nội dung file src/com.example.camera/MainActivity.java.
package com.example.camera;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView myImgFavorite;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myImgFavorite = (ImageView)findViewById(R.id.imageView1);
myImgFavorite.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
open();
}
});
}
public void open(){
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Bitmap bp = (Bitmap) data.getExtras().get("data");
myImgFavorite.setImageBitmap(bp);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Tiếp theo tới file res/layout/activity_main.xml file:
File res/values/strings.xml để định nghĩa hằng số
File AndroidManifest.xml:
Ok rồi đấy, sory vì đoạn trên không hiểu sao post code xml nó lại không hiển thị nên đành phải post hình ảnh. Các bạn chịu khó xem code trong hình ảnh nhé. Xong hết thi chỉ việc nhấn run thôi. Ngoài ra nếu các bạn có thời gian thì có thể tìm hiểu thêm về cách sử dụng camera với api mà android cung cấp. Chúc các bạn thành công !
All rights reserved