[ANDROID] Velodrome : มาจัดการ onActivityResult ด้วย annotation กันเถอะ


          ก่อนจะพูดถึงตัว 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 ได้
}

ลิงค์อ้างอิง

Velodrome : http://levelmoney.github.io/velodrome/

Teeranai P

Developer ตัวน้อยๆ ที่หลงใหลในโลกของการพัฒนา Software. รักการเขียนโปรแกรมเป็นอันดับ 2 รองลงมาจากการนอน