บทความและข่าวสาร | Seven Peaks Insights

คู่มือสำหรับ Android Developer

มีอะไรใหม่ใน ConstraintLayout 2.0 บ้าง?

22f7e8d1-c831-4968-a99c-75b3060fda7a

 

คู่มือสำหรับ Android Developer – เมื่อวันที่ 29 ตุลาคมที่ผ่านมา เราได้จัดงาน Android meetup ขึ้นที่ออฟฟิศของ Seven Peaks Software เพื่อพูดคุยเกี่ยวกับฟีเจอร์ที่ซ่อนอยู่ของ Git และ ConstraintLayout 2.0

มี 3 หัวข้อการบรรยายจากพนักงานของ Seven Peaks Software ที่ต้องการพูดถึงหัวข้อเหล่านี้ เนื่องจากเป็นเรื่องที่พวกเขาหลงใหล รวมถึงต้องการแบ่งปันความรู้และพูดคุยในหัวข้อเหล่านี้กับคนอื่นๆ

 
 

ConstraintLayout2.0

คู่มือสำหรับ Android Developer – สรุปสาระสำคัญของ ConstraintLayout 2.0 ในงาน Meetup

ConstraintLayout คือหนึ่งใน ViewGroup ของ Support Library

มันมีความสามารถที่ดีกว่า ViewGroup ตัวเก่า ด้วยการทำให้คุณสามารถจัดวางเลย์เอาต์ที่มีความเชื่อมโยงกันได้หลากหลายรูปแบบ

ทั้งยังสามารถสร้างเลย์เอาต์ที่ซับซ้อนได้ ด้วยการสร้างองค์ประกอบส่วนใหญ่ของ UI บน visual editor อย่าง Android Studio

สิ่งนี้ถือได้ว่าเป็นเครื่องมือที่ทรงพลังยิ่งกว่า RelativeLayout แน่นอนว่าการมี ConstraintLayout ทำให้คุณสามารถกำหนดเลย์เอาต์ที่ซับซ้อนได้โดยไม่ต้องสร้าง view hierarchies ที่ยุ่งยาก

 
 

มีอะไรใหม่ใน ConstraintLayout 2.0?

ในหัวข้อนี้เราจะมาแนะนำคุณเกี่ยวกับโหมดใหม่ที่น่าใช้ซึ่งมีเพิ่มขึ้นมาใน ConstraintLayout 2.0

Flow คือ virtual layout แบบใหม่ที่เพิ่มขึ้นมาเพื่อช่วยให้คุณสร้าง chain ที่สามารถ wrap บรรทัดต่อไปได้เมื่อมีพื้นที่ไม่พอ โดยไม่ต้องเพิ่ม level เข้าไปใน layout hierarchy ของคุณ

เมื่อคุณวางเลย์เอาต์ของไอเทมหลายๆ ตัวใน chain แต่ยังไม่แน่ใจว่าขนาดของ container ตอน runtime ผลควรมีขนาดเท่าไร เลย์เอาต์นี้ชนิดนี้จะมีประโยชน์ต่อคุณอย่างมาก

WrapMode คือหนึ่งในตัวเลือกสำคัญที่สุดที่มีใน Flow

มีตัวเลือกอยู่ 3 ข้อ สำหรับ wrapMode ที่คุณสามารถเลือกได้

 

None

สร้าง chain ขึ้นมา เลือกได้ว่าจะเป็นแนวตั้งหรือแนวนอน จาก element ที่ใช้อ้างอิงถึง 

 

Chain

สร้าง chain ขึ้นมาหลายตัว โดยโยงกันไปทีละอัน ถ้าหากว่า element ที่ใช้อ้างอิงถึงมีขนาดไม่พอดี

 

Aligned

aligned นั้นคล้ายกับ wrap chain แต่มันจะจัด element ด้วยการสร้างแถวและคอลัมน์ขึ้นมาแทน

 

Layer

เป็นหนึ่งใน view แบบใหม่ที่มีให้ใช้ใน ConstraintLayout 2.0 ที่คล้ายกับ Guideline และ Barrier

มันคือ virtual flow คล้ายกับ Flow แต่ไม่ต้องวางเลย์เอาต์ของ view อย่างที่ Flow เป็น

มันช่วยให้คุณสร้าง virtual layer จากหลายๆ view ที่แตกต่างกันเพื่อสร้างแอนิเมชันและกำหนด transformation บนหลายๆ view พร้อมกันได้

 

Motion Layout

เป็น subclass หนึ่งใน ConstraintLayout ที่มีไฟล์ XML แยกออกมาสำหรับ constraint และ motion element ที่เรียกว่า MotionScene ซึ่งใช้ในการควบคุมการแสดงผลของการเคลื่อนไหวและแอนิเมชัน

มันช่วยให้คุณ animate ระหว่าง Constraint สองชุด ซึ่งเป็นการผสมผสานระหว่าง Property Animation framework, TransitionManager, และ CoordinatorLayout

นอกจากนั้น มันยังสามารถนำมาปรับแต่ง view ได้ว่าจะขยับ, เลื่อน, ปรับขนาด, หมุน, fade, หรือแม้แต่ animate custom attribute อย่างไร

 
 

ฟีเจอร์ที่ซ่อนอยู่ของ Git

ในหัวข้อที่สองนี้จะเกี่ยวกับฟีเจอร์ที่ซ่อนอยู่ของ Git ซึ่งนำเสนอโดย Gahfy ซึ่งเป็น Android Tech Lead ของเรา

 

Git คืออะไร?

Git คือ distributed open source control system ที่ออกแบบมาเพื่อรันโปรเจกต์ทุกชนิด ไม่ว่าจะเล็กหรือใหญ่ อย่างมีประสิทธิภาพและรวดเร็ว

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

เป้าหมายหลักๆ ก็คือความรวดเร็ว, ความน่าเชื่อถือของข้อมูล, และสร้างเวิร์กโฟลว์ที่สามารถกระจายงานได้แบบ non-linear

 

Git ทำงานอย่างไร?

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

แม้ว่า Git จะดูคล้ายเป็น repository สำหรับซอร์สโค้ดเหมือนที่อื่นๆ ถึงแม้ว่าจะดูคล้ายกับ repository แบบดั้งเดิม แต่ที่จริงแล้วมันไม่เหมือนกัน สิ่งที่แตกต่างที่สุดก็คือ Git นั้นเป็นระบบที่ decentralized ซึ่งหมายความว่ามันไม่มีศูนย์รวมในการจัดเก็บไฟล์ไว้ที่เดียวเหมือนที่อื่น

repository หลายแห่งสามารถทำงานร่วมกันได้ในการพัฒนาซอฟต์แวร์ ที่จริงแล้ว repository ของนักพัฒนาจะสื่อสารกันในแบบเดียวกับที่พื้นที่จัดเก็บแบบ server-based ของ Git ทำงาน

 

Git เก็บไฟล์ไว้อย่างไร?

โฟลเดอร์ Git/objects นั้นเป็นโฟลเดอร์ที่เก็บข้อมูลทุกอย่างเอาไว้ ซึ่งการจัดเก็บขั้นพื้นฐานที่สุดเรียกว่า Blob

Git มองข้อมูลเป็นเหมือนคอลเล็กชันของ snapshot ของระบบไฟล์ โดย Git จะบันทึกสถานะโปรเจกต์ของคุณทุกครั้งที่คุณสร้าง commit ขึ้นมา

คุณจะมองเห็นภาพว่าไฟล์ทั้งหมดของคุณอยู่ตรงไหนและจัดเก็บมันไว้พร้อมข้อมูลอ้างอิงของ snapshot

การที่จะทำงานได้อย่างมีประสิทธิภาพ ไฟล์ที่เคยถูกบันทึกไว้แล้วจะไม่มีการสร้างบันทึกอันใหม่ขึ้นมาอีก แต่จะบันทึกลงในไฟล์ที่เคยบันทึกไว้ก่อนหน้านี้ ด้วยวิธีนี้จะช่วยให้คุณไม่มีไฟล์ที่ซ้ำซ้อนกัน 

 

Git command แบบต่างๆ ที่ต้องใช้ – git log

คุณสามารถใช้งาน git log2 ได้ ซึ่งย่อมาจาก online graph แต่จริงๆ แล้ว git log2 ไม่ใช่ Git command

เพราะคุณต้องใช้ config ซึ่งก็คือ alias.log2 “log –pretty = oneline –graph”.

ถือว่าเป็นวิธีลัดที่ดีซึ่งช่วยประหยัดเวลาได้มาก เนื่องจากคุณไม่ต้องพิมพ์ทั้งบรรทัดโค้ดทุกครั้งที่ต้องการใช้งาน

การใช้ alias เป็นสิ่งที่สำคัญมาก ยกตัวอย่างเช่น การทำ checkout หลังจาก pull

คุณควรใช้ alias บน Git เนื่องจากมันมีวิธีลัดหลายแบบที่ช่วยให้ชีวิตคุณง่ายขึ้น

 

Git help -w

คำสั่งที่ได้รับความนิยมอีกอันหนึ่งก็คือ “git help commit” ซึ่งจะบอกรายการให้คุณรู้ว่ามี commit แบบไหนบ้างให้เลือกใช้ได้ใน console

บางครั้งการอ่านอาจจะไม่ค่อยมีประโยชน์นัก แต่คุณก็สามารถใช้คำสั่ง “git help -w commit” เพื่อเปิดคู่มือดูในเว็บเบราว์เซอร์ได้

เมื่อคุณใช้คำสั่งนี้ก็จะเห็นหน้าเว็บที่มีข้อมูลอันเป็นประโยชน์กว่าเดิมปรากฏขึ้นมา

นอกจากนี้ หน้าเว็บสำหรับช่วยเหลือนี้ยังมีประโยชน์ในการดูว่ามันทำงานอย่างไรด้วย ถ้าคุณต้องการใช้มันก็แค่ติดตั้ง git-htmldocs ลงไป เนื่องจากมันไม่ได้อยู่ในแพ็คเกจหลักที่เราใช้กันปกติ

ถ้าคุณไม่ได้ใช้งานบน Linux การ build ไฟล์เอกสารคู่มือดังกล่าวอาจจะยากพอสมควร

Git เป็นเครื่องมือที่ง่ายในการใช้งาน ดังนั้นผมจึงแนะนำให้คุณ build Git จากซอร์สโค้ด เนื่องจากมันไม่ได้ซับซ้อนอะไรมาก แต่สำหรับไฟล์เอกสารคู่มือนั้นแทบจะเป็นไปไม่ได้เลยถ้าหากว่าคุณไม่ได้ใช้ Linux 

 

Git -c clone

ถ้าคุณต้องการโคลน repo ก็สามารถทำได้ด้วยการใส่ argument “-c” ซึ่ง -c จะไปเพิ่ม config เข้าไปในคำสั่งก่อนการโคลน ทำให้คุณมี ssh key เพิ่มขึ้นมาอีกอันหนึ่ง

ยกตัวอย่าง เช่น การโคลน repo นั้น ถ้าคุณใช้ ssh key หลายๆ อันบนคอมพิวเตอร์ของคุณ ก็ให้ใช้คำสั่งต่อไปนี้

git -c core sshCommand= ‘ssh -i private_key_file’ clone@git.com/repo.git

 

Git bisect

bisect สามารถทำงานได้โดยอัตโนมัติด้วยการใช้ bash script ซึ่งมีไฟล์ .sh ที่จะแสดงให้เห็นว่าการทำงานนั้นประสบความสำเร็จหรือไม่

 

Git reflog

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

ดูวิดีโอ Seven Peaks Speaks: Android Meetup บน YouTube ได้ที่นี่ เพื่อรับชมการบรรยายทั้งหมด 

 

เตรียมพร้อมสำหรับ target SDK เวอร์ชัน 29 และ 30 – การใช้งาน Android SDK ระดับเบื้องต้น

วิทยากรท่านที่ 3 ซึ่งเป็นท่านสุดท้าย คือคุณเอก จาก Line ประเทศไทย การบรรยายของคุณเอกเกี่ยวกับหัวข้อ การเตรียมพร้อมสำหรับ target SDK เวอร์ชัน 29 และ 30

Google Play นั้นมีนโยบายว่าคุณต้องอัปเดตแอปฯ ของคุณ ซึ่งเราได้ย้ายข้อมูลจาก Android เวอร์ชันเก่ามาไว้ในแอปฯ ของเรา เพราะ Google Play บอกว่าทุกคนต้องอัปเดตมาใช้ SDK เวอร์ชัน 29 ภายในเดือนพฤศจิกายน ปี 2020 มิฉะนั้นคุณจะไม่สามารถอัปเดตแอปฯ ของคุณใน Google Play Store ได้

ดังนั้น ในวันนี้ ผมจะมาพูดเกี่ยวกับวิธีการเตรียมให้แอปฯ ของคุณพร้อมใช้งาน target SDK เวอร์ชัน 29 และ 30 ซึ่งคุณอาจจะสงสัยว่า แล้วทำไมเวอร์ชัน 30 ถึงเกี่ยวข้องด้วย นั่นก็เพราะว่า งานอีเวนต์ของ Android นั้นกำลังจะจัดขึ้นแล้ว และเราไม่มีเวลามากนักที่จะอัปเดตมัน

 

Google Play’s Target API Level Requirement

ถ้าคุณเป็น Android developer และคุณเปิด Google Play Store ขึ้นมา คุณจะได้รับการแจ้งเตือนให้ “อัปเกรดโปรเจกต์ของคุณเพื่อใช้งาน SDK 29”

ถ้าคุณไม่รีบทำภายในเดือนพฤศจิกายน ปี 2020 ล่ะก็ คุณก็จะไม่สามารถอัปเดตแอปฯ ได้อีกต่อไป ซึ่งเป็นวิธีที่ Google Play Store บีบให้คุณต้องอัปเดตแอปฯ ของคุณบ่อยๆ นั่นเอง

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

 

การแจ้งเตือนแบบ full-screen intent

จะเกิดอะไรขึ้นเมื่อคุณได้รับการแจ้งเตือนแบบ full-screen intent ยกตัวอย่างเช่น เมื่อมีใครบางคนโทรหาคุณแล้วแอปพลิเคชันโทรศัพท์ก็เปิดขึ้นมาเต็มหน้าจอของคุณทันที

หลังจากที่คุณอัปเดตมาใช้ target SDK 29 แล้ว คุณต้องขออนุญาตเข้าถึง full-screen intent ในแอปพลิเคชันด้วย เพื่อบอกกับแพลตฟอร์มว่าคุณจะมีการแจ้งเตือนในรูปแบบนี้

 

การเข้าถึงที่อยู่โดยทำงานอยู่เบื้องหลัง

คุณต้องขออนุญาตในการเข้าถึงข้อมูลที่อยู่เมื่อทำงานอยู่เบื้องหลัง ซึ่งในอดีตนั้นมีการขออนุญาตเพียงสองอย่าง

ได้แก่ ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION แต่ก็ไม่เพียงพอ เนื่องจากแอปฯ ของเราต้องใช้การเข้าถึงข้อมูลที่อยู่ในหลายรูปแบบ โดยเราสามารถระบุการเข้าถึงที่อยู่ได้เพียง 2 แบบ

แบบแรกคือ foreground access ส่วนอีกอันคือ background location access ซึ่งสามารถย่อแอปฯ ลงให้ทำงานอยู่เบื้องหลังแล้วติดตามตำแหน่งที่อยู่ของผู้ใช้

 

การตรวจจับการเคลื่อนไหวของร่างกาย

ขึ้นอยู่กับว่าแอปฯ นั้นทำงานอย่างไร ถ้าแอปฯ ของคุณเกี่ยวข้องกับเรื่องของสุขภาพ มันก็สามารถติดตามการเคลื่อนไหว เช่น วิ่ง, ว่ายน้ำ, เดิน, เป็นต้น ได้ ซึ่งบางครั้งคุณก็ต้องใช้งานเวอร์ชันนี้เพื่อติดตามข้อมูลการเคลื่อนไหวของผู้ใช้

หลังจากเปิดใช้งาน target SDK เวอร์ชัน 29 แล้ว คุณก็ต้องประกาศการขออนุญาตเข้าถึงข้อมูลการเคลื่อนไหวนี้ใน manifest ของคุณ ซึ่งมี 3 method ที่คุณต้องประกาศแบบนี้ ได้แก่ Sensor API, Activity Recognition API, และ Google Fit API

 

Non-resettable Identifiers

สิ่งนี้เป็นสิ่งที่สำคัญมาก เพราะบางแอปฯ นั้นต้องการดึงเอาข้อมูล unique ID จากอุปกรณ์มาใช้

ซึ่งไม่ใช่แค่ข้อมูล Google Cloud และ user ID แต่ยังพยายามดึงเอา unique ID ที่ระบุว่าผู้ใช้กำลังล็อกอินเข้าใช้บัญชีเดียวกันจากอุปกรณ์คนละเครื่อง

เพื่อความเป็นส่วนตัวใน Android 10 พวกเขาจึงบอกว่าคุณไม่สามารถรับข้อมูล serial number ได้อีกต่อไป ถ้าสมมติว่าคุณจำเป็นต้องใช้ข้อมูลนี้จริงๆ จะทำอย่างไร

มีทางเลือกอยู่ 2 ทาง ได้แก่

  • ทางเลือกแรก คือ ติดตามข้อมูล unique ID สำหรับการติดตามข้อมูลแคมเปญโฆษณา หรือทางเลือกที่สอง คือ วิเคราะห์ข้อมูลผู้ใช้ด้วย Android Advertising ID
  • Android developer สามารถอ่านคู่มือนี้ เพื่อดูแนวทางที่เหมาะสมในการใช้ unique identifier ได้
 

MAC address

ใน Android 10 นั้น MAC address ของอุปกรณ์ Android ที่คุณใช้ โดย default แล้วจะใช้วิธีสุ่มค่า ดังนั้น บางแอปฯ อาจจะดึงข้อมูล MAC address แล้วจดจำอุปกรณ์ เนื่องจากพวกเขาไม่สามารถดึง unique ID ได้โดยตรงจากอุปกรณ์ เลยต้องใช้ MAC address แทน

 

Serial number ของอุปกรณ์ USB

ใน Android เวอร์ชันเก่า เมื่อผู้ใช้เชื่อมต่ออุปกรณ์ USB กับมือถือ คุณก็สามารถดึงเอา serial number ได้ แต่ใน target SDK เวอร์ชัน 29 และ 30 นั้น คุณไม่สามารถเข้าถึง serial number ได้จนกว่าผู้ใช้จะอนุญาตให้คุณเข้าถึงข้อมูลของอุปกรณ์

 

ข้อมูล clipboard

คุณไม่สามารถเข้าถึงข้อมูล clipboard ได้ ซึ่งแตกต่างจาก iOS ที่แอปพลิเคชันจะแสดงข้อความบอกผู้ใช้ ก่อนการดึงข้อมูล clipboard

แต่ใน Android คุณไม่สามารถเข้าถึง clipboard ได้ถ้าหากแอปฯ ไม่ได้เปิดอยู่ในขณะเดียวกัน จึงสามารถเข้าถึงได้เมื่อใช้งานแอปฯ ดังกล่าวอยู่เท่านั้น

 

การตั้งค่า Wi-Fi

บางครั้งแอปพลิเคชันก็จะเปิดหรือปิดการใช้งาน Wi-Fi โดยอัตโนมัติบนอุปกรณ์ของเรา แต่ไม่ใช่ว่าผู้ใช้ทุกคนจะชอบที่เกิดเหตุการณ์แบบนี้ขึ้นอัตโนมัติ

ดังนั้น Android 10 จึงปิดฟังก์ชันดังกล่าว และคุณก็ไม่สามารถทำแบบนี้ได้อีกแล้ว คุณต้องแก้ไขโค้ดเพื่อให้แอปฯ สามารถใช้งาน Settings Panel API ได้

มันจะแสดงไดอะล็อกเพื่อบอกให้ผู้ใช้ตัดสินใจเปิดสัญญาณบลูทูธหรืออินเทอร์เน็ตด้วยตัวเอง ไม่ใช่แอปฯ เป็นฝ่ายเปิด

 

Firebase

มีอยู่ 2 ประเภท ประเภทแรกคือ JobDispatcher และประเภทที่สองคือ GcmNetworkManager.

มันจะถูกปิดใน Android 11 และ target SDK เวอร์ชัน 30 ดังนั้น คุณจึงต้องแก้ไขโค้ดแล้วเริ่มใช้งาน WorkManager ซึ่งทำงานได้ดีกว่าและดูสบายตากว่ามาก

 

Package Visibility

เกี่ยวกับเรื่องของความเป็นส่วนตัว ซึ่ง 2 เวอร์ชันล่าสุดของ Android นั้นเน้นเรื่องของความเป็นส่วนตัวและความปลอดภัยมากขึ้น

เมื่อเราต้องโต้ตอบกับแอปฯ อื่น เราจะใช้งาน intent เพื่อเป็นสื่อกลางบนแพลตฟอร์ม Android โดยคุณสามารถตรวจสอบได้ว่ามีกี่แอปฯ ที่ผู้ใช้ติดตั้งลงบนอุปกรณ์ของเขา

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

โดยสามารถเข้าถึงข้อมูลแพ็กเกจได้ 3 ประเภท ดังต่อไปนี้

  • ชื่อแพ็กเกจ
  • Intent signature
  • ผู้ผลิต
 

ชื่อแพ็กเกจ

คุณต้องประกาศชื่อแพ็กเกจใน query tag ถ้าคุณต้องการโต้ตอบกับแอปฯ อื่น เพื่อให้ผู้ใช้ที่ติดตั้งแอปฯ อื่นอย่างเช่น Facebook สามารถใช้งานได้ร่วมกันได้

เมื่อคุณแชร์รูปภาพไปยังแอปฯ Facebook ในเวอร์ชันเก่าคุณจะเห็นหน้าแอปฯ ของ Facebook เลย

แต่ใน Android 11 ผู้ใช้จะมองเห็นเพียงแอปฯ ของระบบเท่านั้น บางแอปฯ จะซ่อนสิ่งนี้ไว้ไม่ให้ผู้ใช้เห็น ขึ้นอยู่กับว่าใช้แพลตฟอร์มไหน

 

Intent Signature

บางครั้งคุณจำเป็นต้องใช้ intent และส่งการทำงานบางอย่างไปยังแอปพลิเคชันอื่น ด้วยการประกาศมันลงไปใน query tag คุณสามารถประกาศ intent ใดก็ได้ใน query เพื่อบอกแพลตฟอร์มว่าต้องทำอะไร และแพลตฟอร์มก็จะหาแอปฯ ที่ตรงกันกับ intent ดังกล่าวเพื่อเปิดใช้งาน

 

ผู้ผลิต

ถ้าแอปฯ ของคุณจำเป็นต้องเข้าถึงข้อมูลผู้ผลิตของแอปฯ อื่น คุณก็ต้องประกาศชื่อผู้ผลิตแอปฯ นั้นไว้ใน query tag ด้วย

สำหรับแอปฯ ที่ใช้บริการ TTS หรือ บริการสั่งงานด้วยเสียง คุณก็ต้องประกาศไปใน query เช่นกัน ไม่อย่างนั้นคุณจะใช้งาน TTS หรือ บริการสั่งงานด้วยเสียงได้เฉพาะกับแอปฯ ของระบบเท่านั้น

ดูวิดีโอ Seven Peaks Speaks: Android Meetup บน YouTube ได้ที่นี่ เพื่อรับชมการบรรยายทั้งหมด


คุณต้องการร่วมทีมที่กำลังเติบโตอย่างรวดเร็วของเราไหม
ดูตำแหน่งงานที่เปิดรับสมัครได้เลย!
ดูตำแหน่งงานที่เปิดรับสมัคร