29 April 2013

ว่าด้วยเรื่อง Context

Updated on

Context เป็นคลาสตัวหนึ่งที่ผู้ที่หลงเข้ามาอ่านหลายคนคุ้นตากัน
โดยเฉพาะการเรียกใช้คลาสหลายๆคลาสที่เวลากำหนดค่านั่นแหละ
ซึ่งจะใช้สำหรับติดต่อใช้คำสั่งของแอปพลิเคชันนั้นๆ
และรวมไปถึงการระบุเรียกใช้ Global Variable ของคลาสนั้นๆด้วย


เช่น getPackageName() ฟังก์ชันที่ดึง Package Name เป็น String
หรือคำสั่ง setTitle(String) ที่ใช้กำหนดชื่อ Label ของแอปฯนั้นๆ

แต่ทีนี้ Context สามารถประกาศเรียกได้หลายๆแบบด้วยกัน



• เรียกคำสั่งทันที โดยสามารถทำได้อยู่แล้ว และ Context ดังกล่าว
ก็จะอิงจาก Activity ที่ชื่อ Main นั่นเอง (อยู่ที่ตำแหน่งของคำสั่ง)

• เรียกคำสั่งโดยระบุจาก this ก่อน ซึ่ง this เป็นคำสั่งที่เอาไว้ระบุ
แบบเจาะจงเพื่อ แต่ว่าจะอิงจากบรรทัดที่เรียกใช้ ว่าอยู่ในไหน

• เรียกคำสั่งโดยระบุจาก Main.this ซึ่ง Main ก็คือชื่อ Activity
วิธีนี้จะเป็นการระบุที่เจาะจงมากกว่าการใช้ this เฉยๆ
คือระบุไปโดยตรงเลยว่าใช้ Context ที่มาจาก Main

• การเรียกใช้คำสั่งเพื่อดึง Context ของ Application โดยตรง

ซึ่งเอาจริงๆแล้ว พวกนี้ก็คือ Context เหมือนกันนั่นแหละ
แต่ความต่างกันก็คือวิธีในการเรียก และตำแหน่งของคำสั่งที่เรียก



โดยส่วนตัวเจ้าของบล็อกก็ไม่อยากให้เจาะลึกกับมันมากนัก
ส่วนนึงก็เพราะว่าเจ้าของบล็อกนึกคำอธิบายคลาสนี้ไม่ค่อยออก
เอาจริงๆแล้วหัวใจสำคัญของมันอยู่ที่ตอนเรียกใช้งานมากกว่า

เพราะหลายๆคลาสเวลาประกาศจะต้องกำหนดค่า Context ด้วย
ดังนั้น Context ที่เอามากำหนดส่วนใหญ่ก็จะมาจาก Application


จากตัวอย่างดังกล่าวก็คือประกาศ GridView และกำหนด Context ลงไป
ก็จะเห็นว่าการเรียก Context ทั้ง 3 วิธี สามารถกำหนดค่าได้เหมือนกัน

ทีนี้มาดูจุดที่ผิดกันบ้าง ผู้ที่หลงเข้ามาอ่านหลายคนอาจจะเคยเจอ


จากภาพข้างบนจะเห็นว่าเข้าของบล็อกประกาศ GridView สองที่
ตัวแรกประกาศไว้ใน onCreate ของ Main สามารถทำงานได้ปกติ
แต่ว่าอีกตัวเจ้าของบล็อกประกาศไว้ใน OnClickListener แทน
และจะเห็นว่า Eclipse ได้เตือนเออเรอว่าไม่สามารถใช้ this ได้

this เป็นคำสั่งที่ดึง Context จากที่ที่ตัวมันเองอยู่ ณ ตอนนั้น
การเรียกใช้ในฟังก์ชัน onCreate ก็จะดึง Context จากคลาส Activity
แต่ตอนนี้ this อยู่ที่คลาส OnClickListener ซึ่งไม่มี Context ส่งกลับมาให้
จึงทำให้เกิดเออเรอขึ้นมาเพราะว่าดึง Context จาก onClickListener ไม่ได้

ดังนั้นการใช้ this จะต้องดูด้วยว่าเรียกใช้ที่ไหนของโปรแกรม
ถึงแม้ว่า OnClickListener จะอยู่ในคลาส Activity ก็จริง
แต่ว่า this จะมองจากที่ที่ตัวมันเองอยู่ ก็คือ OnClickListener
(เพราะโดยปกติ Activity กับ Listener ทำงานแยกกันอยู่แล้ว)

ดังนั้นถ้าจะใช้ this อย่างเดียวไม่ได้ ก็ให้ระบุชื่อ Activity ด้วย


วิธีนี้จะเป็นการระบุๆไปตรงๆเลยว่า this ที่เรียกมาจาก Main
และเนื่องจาก Main เป็นคลาส Activity อยู่แล้ว ก็ดึง Context ได้
(อย่าลืมล่ะว่าวิธีนี้ อิงตาม Main.java ถ้าไม่ใช้ Main ก็เปลี่ยนตามด้ว
เช่น ถ้าใช้ใน ShowData.java ก็ต้องเปลี่ยนเป็น ShowData.this ด้วย)

หรืออีกวิธีหนึ่งก็คือใช้ getApplicationContext() ไปเลยชัวร์สุด
เพราะว่าจะเป็นคำสั่งที่ใช้ดึง Context จาก Application  โดยตรง
ไม่ต้องมานั่งระบุชื่่อของ Activity ที่เรียกใช้งานอีกด้วย


แต่วิธีนี้ติดแค่ปัญหาเดียวคือ พิมยาวกว่าชาวบ้านเค้า
เนื่องจากเจ้าของบล็อกต้องเขียนโค๊ดอธิบายในบทความ
บางทีคำสั่งนี้มันทำให้โค๊ดยาวเกินไปต้องตัดบรรทัดใหม่ 555
แต่วิํธีนี้ก็ง่ายดีเพราะไม่ต้องสนใจว่าอยู่ใน Activity อะไร

ดังนั้นก็สรุปคราวๆก็ดูรูปข้างล่างเอาละกัน
ว่าแบบไหนใช้ได้แบบไหนใช้ไม่ได้บ้าง


สำหรับคลาสที่ดึง Context ได้บ้างไม่ได้บ้าง 
ส่วนมากจะเป็นคลาสที่เกี่ยวกับการทำงานของ Thread 
เช่น Activity, Thread, Listener หรือ Handler เป็นต้น
อยากรู้เพิ่มเติมก็ต้องไปศึกษาดูกันเองนะครับ


26 April 2013

การรับข้อมูล Intent จากแอปฯอื่นแล้วส่งข้อมูลกลับไป

Updated on



        สำหรับบทความนี้เจ้าของบล็อกคงอธิบายยาก เพราะกลัวว่าผู้ที่หลงเข้ามาอ่านจะไม่เข้าใจซะมากกว่า จากบทความก่อนหน้านี้จะเป็นการรับ Content จากแอพฯอื่น คราวนี้จะเป็นการรับ Intent มาอย่างเดียว คือไม่มีข้อมูลส่งมา แต่ว่าจะให้ผู้ใช้เลือกข้อมูลที่จะส่งกลับไปที่แอพฯนั้นๆแทน

        ถ้ายังไม่เข้าใจ ให้นึกภาพว่าใช้แอพตัวหนึ่งเช่นแต่งภาพ ทีนี้แอพฯพวกนี้ก็จะมีให้เลือกว่าเลือกไฟล์ภาพจาก Gallery แอพฯก็จะ Intent ไปที่ Gallery เพื่อเลือกภาพจาก Gallery เมื่อเลือกภาพได้แล้ว Gallery ก็จะส่งไฟล์ภาพกลับมานั่นเอง และคราวนี้แหละ จะเลียนแบบความสามารถที่ว่าของ Gallery

การรับข้อมูล Intent จากแอปอื่นๆ

Updated on


        เกริ่นเรื่อง Intent มาหลายบทความล่ะ ในที่สุดก็มาถึงช่วงหลังๆที่เป็นหัวใจสำคัญของคลาส Intent เลย จากที่กล่าวมาก่อนหน้า จะเห็นว่าเจ้าของบล็อกได้ยกตัวอย่างการใช้ Intent เพื่อส่งข้อมูล ไปยังแอพภายนอก แต่คราวนี้เจ้าของบล็อกจะขอทำกลับกันบ้าง คราวนี้เป็นตัวอย่างแอพเพื่อรับข้อมูลที่ส่งมาจากแอพอื่นๆแทน

25 April 2013

การอ่าน QR Code และ Barcode ด้วย Intent

Updated on


        คราวนี้ก็ต่อกันด้วยการใช้ Intent เพื่ออ่าน QR Code หรือ Barcode ซึ่งจะยังคงคอนเซปท์เดิมเลยก็คือ ไม่เขียนโปรแกรมเองหรอก แต่จะใช้การอ่าน QR Code และ Barcode จากแอพภายนอกแทน

        สำหรับแอพที่รองรับการ Intent เพื่อขอใช้งานอ่าน Code ที่เจ้าของบล็อกรู้จักมีอยู่สามตัวคือ Barcode Scanner ของ XZing เจ้านี้ชื่อดังเรื่องการอ่านข้อมูล QR Code กับ Barcode เลยล่ะ และอีกสองตัวก็คือ Google Goggle กับ Google Search นั่นเอง ทั้งสองตัวนี้มีความสามารถในการอ่าน Code ในตัวอยู่แล้ว

23 April 2013

การใช้งานกล้องเพื่อบันทึกวีดีโอแบบง่ายๆด้วย Intent

Updated on


        ต่อจากบทความเรื่องการใช้กล้องถ่ายภาพจาก Intent ที่มาคู่กันก็ต้องเป็นบันทึกภาพวีดีโอสิเนอะ ดังนั้นบทความนี้ก็ขอต่อเป็นเรื่องบันทึกวีดีโอละกัน สำหรับ Concept ของการใช้ Intent ก็ยังคงเหมือนเดิมเช่นเคย ซึ่งก็คือ สำหรับแอพที่อยากจะใช้งานบางอย่าง แต่ว่าไม่ได้ต้องการจัดการเอง ดังนั้นการ Intent ไปยังแอพภายนอกก็เป็นตัวเลือกที่อย่างหนึ่งดีเช่นกัน

22 April 2013

การใช้งานกล้องเพื่อถ่ายภาพแบบง่ายๆด้วย Intent

Updated on


        ถึงแม้ว่าบทความนี้จะเป็นเรื่องกล้อง แต่ก็ยังไม่พ้นเรื่อง Intent อยู่ดี เพราะว่าคราวนี้จะเป็นการใช้งานกล้องจากแอพอื่นนั่นเอง เหมาะกับแอพที่ไม่ได้ใช้งานกล้องอะไรมากนัก ต้องการแค่ภาพถ่ายเพื่อที่จะได้ไม่ต้องจัดการอะไรเกี่ยวกับโค๊ดของกล้องให้มากนัก

การเลือกไฟล์ภาพจาก Gallery ด้วย Intent

Updated on


        สำหรับบทความนี้ก็จะเป็นการดึงไฟล์ภาพจากเครื่องมาใช้งาน ผู้ที่หลงเข้ามาอ่านหลายๆคนอาจจะรู้อยู่แล้วกับการดึงไฟล์ภาพต้องเอาภาพใส่เครื่องก่อน แล้วกำหนดที่อยู่ของภาพให้ตรง แต่ว่าถ้าอยากจะเลือกไฟล์ภาพที่มีทั้งหมดในเครื่องล่ะ? จะเขียนให้โปรแกรมแสดงข้อมูลภาพที่มีในเครื่องเพื่อเลือกก็ใช่เรื่อง ถ้าแอพที่สร้างไม่ได้ต้องการลูกเล่นอะไรมากมาย ดังนั้นการใช้ Intent เพื่อเปิด Gallery เลือกรูปภาพแทน ก็ดีกว่า

19 April 2013

การใช้ Intent สำหรับแชร์ไฟล์ให้แอปอื่นๆ

Updated on


         จากบทความเก่าที่เป็นการแชร์ข้อมูลที่เป็น Text และ Email แต่ทั้งสองบทความนั้นก็ยังเป็นข้อมูลที่เป็นข้อความอยู่ดี คราวนี้ก็มาถึงการแชร์ข้อมูลที่เป็นไฟล์ต่างๆ กันดูบ้าง

18 April 2013

การใช้ Intent เพื่อเปิดไฟล์ด้วยแอปอื่นๆ

Updated on


        บทความนี้ก็เป็นอีกบทความหนึ่งที่มีความสำคัญสำหรับ Intent เพราะจะเป็นการเปิดไฟล์ต่างๆ ด้วยการใช้คลาส Intent แทน เพราะไม่ต้องมานั่งเขียนโปรแกรมเพื่อเปิดไฟล์นั้นๆ เอง แต่จะส่งไฟล์นั้นๆ ไปเปิดบนแอพอื่นที่รองรับแทน

17 April 2013

การใช้ Intent เพื่อเปิดแผนที่ด้วยแอปอื่นๆ

Updated on

        ก็ยังคงอยู่ที่เรื่อง Intent เหมือนเคย คราวนี้ต่อกันด้วยการดูแผนที่ โดยไม่ต้องเขียนให้โปรแกรมเรียกใช้งาน Google Maps แต่อย่างใด เหมาะกับแอพที่ไม่ได้ต้องการใช้งาน Google Maps มากนัก

16 April 2013

การใช้ Intent เพื่อเปิด URL ด้วยแอปอื่นๆ

Updated on

        ต่อด้วยบทความเรื่อง Intent อยู่เหมือนเดิม แต่คราวนี้เปลี่ยนบ้าง จากเดิมที่เป็นการส่งไปยังแอพอื่นเพื่อแชร์หรือส่งเป็นหลัก (Send) คราวนี้ก็เปลี่ยนมาเป็นการเปิดดูข้อมูลด้วยแอพอื่นๆกันบ้าง (View) ซึ่งเป็นการนำ Intent มาใช้งานในรูปแบบของการ View นั่นเอง จะมีข้อดีคือเวลาที่ต้องการแก้ไขหรือจัดการไฟล์ใดๆก็ตาม ผู้ที่หลงเข้ามาอ่านไม่จำเป็นต้องเขียนโค๊ดเพื่อจัดการเรื่องนั้นๆ เพียงแค่ใช้คำสั่ง Intent แล้วส่งไปให้แอพอื่นๆจัดการแทน เช่น การเปิดดูไฟล์เอกสาร การเปิดดูภาพ หรือการเปิดดูแผนที่ เป็นต้น

การใช้ Intent สำหรับแชร์ข้อความสำหรับ Email

Updated on
        ต่อจากบทความเก่าที่พูดเรื่อง Intent กับการแชร์ข้อความที่เป็น Text คราวนี้ก็ขอเป็นตัวอย่างการแชร์ข้อความที่เป็น Email กันดูบ้างเนอะ ซึ่งจริงๆแล้วเจ้าของบล็อกคิดว่าไม่ค่อยมีความสำคัญซักเท่าไรนัก แต่อยากจะให้มีตัวอย่างหลายๆแบบเพื่อให้ผู้ที่หลงเข้ามาอ่านเข้าใจ

การเรียกเปิดแอพฯอื่นๆ ด้วย Intent

Updated on


        สำหรับบทความนี้ก็เป็นการสั่งให้เปิดแอพอื่นๆในเครื่องก็เหมือน Shortcut น่ะแหละ ซึ่งต่างจากบทความเดิมที่เคยกล่าวมา เพราะอันนั้นเป็นการเปิดแอพฯอื่นๆ เพื่อใช้งานบางอย่างเท่านั้น แต่คราวนี้เป็นการเปิดแอพฯที่เหมือนกับกดเปิดจากไอคอนแอพฯ

13 April 2013

การใช้ Intent สำหรับแชร์ข้อความ String ให้แอปอื่น

Updated on

        บทความนี้จะเป็นตัวอย่างการใช้ Intent นอกเหนือจากการเปิด Activity ใหม่ เพราะ Intent เป็นคลาสที่สามารถใช้งานได้มากกว่านั้นมากมาย เจ้าของบล็อกจึงขอทำเป็นตัวอย่างให้ผู้ที่หลงเข้ามาอ่านได้รู้ ว่าทำอะไรได้อีก

09 April 2013

รวม ADB Driver สำหรับอุปกรณ์แอนดรอยด์

Updated on

        อัพเดทล่าสุด 25 มีนาคม 2558 (25/03/2015) 

        โปรดอ่านซักหน่อย - บทความนี้ทำขึ้นมาเพื่อใช้ในงานพัฒนาแอปพลิเคชัน เพื่อให้นักพัฒนาสามารถพัฒนาแอปพลิเคชันลงบนอุปกรณ์ได้ง่ายขึ้น สำหรับผู้ที่หลงเข้ามาอ่านทั่วๆไปก็ยังคงสามารถดาวน์โหลดไปใช้งานได้ตามปกติ แต่จะเอาไปแล้วรูทหรือแฟลชรอมหรืออื่นๆใดก็ตาม บทความนี้ไม่รับปรึกษาปัญหาจาก User นะครับ เพราะงั้นจึงไม่รับตอบปัญหาแฟลชรอมยังไง รูทยังไง หรือทำแล้วมีปัญหาต้องแก้ยังไงนะครับ


        สำหรับเหล่าพัฒนาแอปพลิเคชันแอนดรอยด์คงจะรู้ดีกันว่าการเชื่อมต่ออุปกรณ์แอนดรอยด์กับเครื่องคอมพิวเตอร์ เพื่อที่จะได้ติดตั้งแอปพลิเคชันผ่าน Eclipse โดยตรงได้ และที่สำคัญที่สุดก็คือสามารถเช็ค Log จาก LogCat ได้

        แต่ว่าการจะทำแบบนั้นได้ จะต้องมีการติดตั้งไดรเวอร์ก่อน ซึ่งเป็นไดรเวอร์ของ Android Debugging Bridge (ADB) แต่ไดรเวอร์ดังกล่าวนี้ใช่ว่าเสียบกับคอมปุปแล้วเจอเลย เพราะจะต้องไปหาตัวติดตั้งไดรเวอร์มาติดตั้งกันเอง และอุปกรณ์แอนดรอยด์แต่ละยี่ห้อก็จะใช้ไดรเวอร์ต่างกัน ถ้าเครื่องที่ผู้ที่หลงเข้ามาอ่านมีแบรนด์ก็อาจจะหาได้ง่าย เพราะจะมีให้หาดาวน์โหลดตัวติดตั้งไดรเวอร์กันได้ง่าย แต่สำหรับผู้ที่หลงเข้ามาอ่านหลายๆคนที่ใช้เครื่องแปลกๆที่เป็นเครื่องจากจีน ก็จะหายากหน่อยเพราะผู้ผลิตไม่ได้แจก