ก่อนจะพูดถึงตัว Library ขอพูดถึงวิธีการปกติที่เราทำกันก่อนนะครับ เหตุการณ์ที่เราจะใช้ onActivityResult ที่เห็นกันบ่อยๆ ก็จะเป็นการเปิด Gallery, Camera แล้วต้องการที่จะได้ Bitmap กลับมาใช้งานต่อใน Activity ของเรานั่นเอง มาดูตัวอย่างโค้ดซักเล็กน้อย
สั่งเปิด Camera Intent ด้วย startActivityForResult
private static final int IMAGE_REQUEST_CODE = 1;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, IMAGE_REQUEST_CODE);
รอรับผลลัพธ์ด้วย onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == IMAGE_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
// TO DO : เอาข้อมูลใน intent ไปยำต่อได้เลยครับ
}
}
super.onActivityResult(requestCode, resultCode, intent);
}
สำหรับรายละเอียดเพิ่มเติม แนะนำให้ดูเพิ่มเติมที่บล๊อกของ คุณเอก [Android Code] การใช้งานกล้องเพื่อถ่ายภาพแบบง่ายๆด้วย Intent
อ่านบทความของคุณเอกจบแล้วก็กลับมาดูเรื่อง Library ของเรากันต่อดีกว่า
การติดตั้ง
compile 'com.levelmoney.velodrome:velodrome:1.0'
การใช้งาน
การใช้งานหลักๆ เหมือน onActivityResult เลยครับ เพียงแต่โค้ดจะกระชับกว่า ดูสะอาด และดูแลง่ายกว่าเท่านั้นเองครับpublic static final int REQUEST_DELETE = 0;
public static final int REQUEST_TEXT_ENTRY = 1;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// โค้ดตรงนี้ต้องมีเพื่อเป็นการให้ Velodrome เริ่มทำงาน
Velodrome.OnActivityResult(this, requestCode, resultCode, data);
}
@OnActivityResult(REQUEST_DELETE)
public void onConfirmDelete() {
// ให้ทำงานเมื่อ request code คือ REQUEST_DELETE
}
@OnActivityResult(REQUEST_TEXT_ENTRY)
public void onTextResult(@Arg("text") String text) {
// 'text' คือ key ของ data ใน Intent ซึ่ง library จะแยกออกมาให้
}
@OnActivityResult(value=REQUEST_TEXT_ENTRY, resultCode=Activity.RESULT_CANCELED)
public void onTextAborted(Intent data) {
// เนื่องจาก Velodrome จะใช้ result code RESULT_OK เป็น default
// หากต้องการใช้ result code แบบอื่นต้องกำหนดเพิ่มเติมด้วยวิธีด้านบน
}
@OnActivityResult({100, 101})
public void onOther() {
// สามารถรองรับ multiple request code ได้
}