Sila Pakdeewong
6 min readOct 11, 2020

--

อะไรใหม่ อะไรน่าสนใจ ในหัวข้อ What’s New in Android 11 เก็บตกจากงาน GDG DevFest Bangkok 2020

จบกันไปเเล้วนะครับสำหรับงาน GDG DevFest Bangkok 2020 ที่จักชึ้นโดย Google Developer Group Bangkok ครับ โดยในรอบนี้ก็มีการอัพเดทเทคโนโลยีใหม่ๆ ไม่เพียงเเค่นั้นเรายังได้เจอกับ Speaker เเละ GDE (Google Developer Expert) ทั้ง 12 ท่านที่มีความสามารถเเละเชี่ยวชาญในเทคโนโลยีนั้นๆ ภายในงานอีกด้วยครับ

เเต่ถ้าพูดถึงหัวข้อการบรรยายภายในงานหนึ่งในหัวข้อที่น่าสนใจ เเละตื่นเต้นสำหรับผมอีกหนึ่งหัวข้อไม่เเพ้ Firebase เลย นั่นก็คือ Android นั่นเองครับ ในหัวข้อ What’s New in Android 11 ที่บรรยายโดย GDE (Google Developer Expert) ด้าน Android เเละ Android Engineer จาก LNE MAN Wongnai ครับ

โดยในวันนี้ผมได้รวมรวมเเละสรุปสิ่งใหม่ เเละสิ่งที่น่าสนใจในหัวข้อนี้มาให้ได้อ่านในบทความนี้กันครับ ถ้าพร้อมกันเเล้วก็มาเริ่มกันเลยครับ

ฟีเจอร์ที่น่าสนใจเเละมาใหม่ใน Android 11

  • Device Control จากปกติที่เป็นเเค่ปุ่มปิดเครื่อง เเต่หลังจากนี้เราสามารถใช้ประโยชน์จากปุ่มปิดเครื่องโดยการกดปุ่มค้างไว้ หลังจากนั้นก็จะมีเมนูขึ้นมาให้เราสามารถจ่ายเงินผ่าน Google Pay เเละ Control เครื่องใช้ไฟฟ้าภายในบ้างเราได้เลย
  • Bubbles อยากตอบข้อความใครว่าต้องกดเข้าไปในเเอพอย่างเดียว นี่เลยเราขอนำเสนอ Bubbles หรือ เราสามารถกดเข้าไปตอบข้อความผ่าน Bubbles Notification บทหน้าจอของเราได้เลย

อยากพัฒนาเเอพให้รองรับการใช้งาน Bubbles จะทำได้ยังไงบ้าง ?

  1. สร้าง indent เเล้วกำหนด Activity ที่เราต้องการให้มันเเสดงผลให้ผู้ใช้งานเมื่อกดเข้า Bubbles เเละโยนเข้าไปให้ PendingIntent เพื่อรอการเปิดใช้งาน Bubbles จากผู้ใช้งาน

2.สร้าง BubbleMetaData ด้วยคลาส NotificationCompat เพื่อทำการสร้าง BubbleMetaData ครับ

3.สร้าง Notification เพื่อเเสดง Bubbles เเก่ผู้ใช้งาน

(เเต่ ! การยิง Bubbles Notification ไม่สามารถใช้งานเพื่อทำการยิงโฆษณาหรือการยิงข้อความเเจ้งเตือนอื่นๆ นอกเหนือจากข้อความเเบบ Messaging Style หรือข้อความเเจ้งเตือนเเบบบทสนทนาได้นะครับ)

รองรับการใช้งานการเเสดงผลร่วมกับมือถือหน้าจอเเบบ Waterfall Displays (โทรศัพท์มือถือเเบบจอโค้ง)

  • ให้ผู้ใช้งานหรือนักพัฒนาสามารถเข้าไปปรับการเเสดงผลบนพื้นที่ด้านข้างของหน้าจอได้ ว่าอยากให้การเเสดงผลบนหน้าจอเเบบ Waterfall ยังไง โดยสามารถกดเข้าไปตั่งค่าได้ใน Developer Option เเละกดเข้าไปตรงเมนูที่ชื่อว่า Display cutout นั่นเองครับ โดยหลังจากกดเข้าไปก็จะมีตัวเลือกการเเสดงผลขึ้นมาให้เราสามารถเลือกได้ว่า ต้องการให้มีการเเสดงผลเเบบไหนนั่นเองครับ

รองรับการใช้งานการเเสดงผลร่วมกับมือถือหน้าจอเเบบ Hinge Angle (โทรศัพท์มือถือเเบบจอพับได้)

  • นักพัฒนาสามารถพัฒนาเเอพให้รองรับกับหน้าจอเเบบพักได้ โดยการใช้ Sensor API (Hinge Sensor) เเละ Jetpack Window Manager ในการตรวจจับองศาการพับ หรืองอของหน้าจอในขณะนั้นได้ครับ โดยโค๊ดของทั้ง 2 API ก็จะมีประมาณนี้ครับ

การกำหนด Sensor Event Listener เพื่อรอรับอีเวนท์การเปลี่ยนเเปลงขององศา หน้าจอเเบบพับได้จากผู้ใช้งาน ผ่าน Sensor API

ทำผ่าน Jetpack Windows Manager โดยการสร้าง windowsManager Object จากนั้นทำการ Register เพื่อรอรับการเปลี่ยนเเปลงขององศาหน้าจอจากผู้ใช้งาน

  • เเต่ใน Windows Manager นักพัฒนาจะได้องศาการงอหรือพับหน้าจอ มาในรูปเเบบของ DeviceState โดยจะมีด้วยกัน 5 State นั่นก็คือ POSTURE_CLOSED / POSTURE_FLIPPED / POSTURE_HALF_OPENED / POSTURE_OPENED เเละ POSTURE_UNKNOW นั่นเองครับ โดยนักพัฒนาสามารถดักการเปลี่ยนเเปลงจากตรงนี้ เเล้วทำการอัพเดท UI ได้ตามต้องการครับ
  • หลังจากนั้นก็ทำการ Register Device Stage Change Callback ในฟังชั่น onStart() เเละ Unregister ในฟังชั่น onStop() นั่นเองครับ

เเล้วนักพัฒนาสามารถทำสอบโทรศัพท์มือถือเเบบหน้าจอพับได้ ได้ยังไง ? คำตอบก็คือว่าเราไม่ต้องซื้อโทรศัพท์มือถือมาทดสอบเองครับ โดยใน Android Studio จะมี AVD ที่เป็นโทรศัพท์มือถือเเบบหน้าจอพับได้ มาให้นักพัฒนาได้ทดสอบกันนั่นเองครับ

  • โดยหลักๆ เเล้วการทดสอบก็จะมีให้นักพัฒนาทดสอบได้ในรูปเเบบหน้าจอ ปกติ (ก่อนกางออกมา) ที่ 6.62 นิ้ว เเละ หน้าจอหลังจากกางออกมา ที่ 8.03 นิ้วครับ
  • เเต่ !!! ถ้าอยากจะกางเป็นองศา หรือกางมากกว่านั้น ตามที่เราต้องการหละ อันนี้เราจะต้องไปเพิ่มในส่วนของ Config ของอุปกรณ์นั่นๆครับ โดยให้เราเพิ่มในส่วนของ Config ตามนี้เข้าไปให้กับอุปกรณ์ของเราครับ
  • หลังจากนั้นก็จะมีเมนู Flip นี้ขึ้นมาให้เราสามารถตั่งค่าได้ใน Emulator ของเรา โดยเราสามารถปรับองศาของเราได้ตามที่เราต้องการเเล้วครับ (เเต่ต้องเพิ่ม Config ด้านบนก่อนนะครับ)

Biometric Authentication

  • Authentication Request Types ใหม่ใน Android 11 นั่นก็คือ 1.BIOMETRIC_STRONG / 2.BIOMETRIC_WEAK เเละ 3.DEVICE_CREDENTIAL (การใช้ Pin หรือ Pattern ของมือถือของผู้ใช้)
  • Authentication Result Type ดูว่าผู้ใช้เลือกอะไรในการยืนยันตัวตน ได้เเก่ 1.BIOMETRIC / 2.DEVICE_CREDENTIAL เเละ 3.UNKNOW โดยสามารถกำหนดค่าได้จาก BiometricPromp ว่าเราจะ Allow ให้ผู้ใช้สามารถใช้ Authenticators เเบบไหนได้บ้าง นั่นเองครับ
  • หลังจากนั้นก็มาดักในส่วนของ onAuthenticationSucceeded นั่นเองครับว่า Authentication Result ที่ผู้ใช้ทำการใส่เข้ามาอยู่ในรูปเเบบไหนครับ

Wireless Debugging เอาใจนักพัฒนาที่ขี้เกียจพกสายชาร์จ หรือลืมสายชาร์จเอาไว้ที่ไหนก็เเล้วเเต่

ใน Android 11 นักพัฒนาสามารถ Debug เเอพได้โดยที่ไม่ต้องต่อสายอุปกรณ์ของเราเข้ากับคอมพิวเตอร์ครับ (ถือว่าเป็นอีกหนึ่งฟีเจอร์สำหรับนักพัฒนา ที่สะดวกเเละน่าสนใจมากครับ) เเต่รองรับเเค่บน Android 11 นะครับ !

  • โดยวิธีการใช้งานก็สามารถเข้าไปใน Developer Option เเละเลื่อนหาเมนู Wireless Debugging เเล้วทำการเปิดใช้งานครับ
  • หลังจากนั้นก็ทำการเอา Code ที่ได้บนมือถือ (หรือใครจะใช้ QR Code ก็ได้นะ)ไปทำการ Pair อุปกรณ์ของเราเข้ากับคอมพิวเตอร์ครับ เพียงเเค่นี้เราก็สามารถ Debug เเอพของเราได้โดยที่ไม่ต้องต่อสายอีกเเล้วครับ

Windows Insets Controller ดูได้เเล้วว่าตอนนี้บนหน้าจอของเรามีพื้นที่การเเสดงผลอยู่เท่าไหร่

  • Windows Insets Types : CaptionBar / DisplayCutout / IME / MandateSystemGestures / NavigationBars / StatusBars / SystemGuestures / TappableElement
  • สามารถสั่งเเสดงผล หรือซ่อน Keyboard ได้โดยไม่ต้องเขียนโค๊ดเเบบอ้อมโลกเเล้ว โดยสามารถเลือกใช้งานได้จาก windowsInsetsController.show(WindowsInsets.Type.ime()) เพื่อเเสดงคีย์บอร์ด หรือ windowsInsetsController.hide(WindowsInsets.Type.ime()) เพื่อซ่อนคีย์บอร์ดครับ (ไม่ใช่เเค่คีย์บอร์ดเเต่ยังสามารถใช้ได้กับ Windows Insets Types ทุกตัวด้านบนครับ)
  • อยากจะรู้ว่าผู้ใช้เปิดคีย์บอร์ดอยู่รึเปล่า ? ก็สามารถทำได้เเล้วโดยการเรียก view.rootWindowInsets.isVisible(WindowsInsets.Type.ime()) นั่นเองครับ (ไม่ใช่เเค่คีย์บอร์ดเเต่ยังสามารถใช้ได้กับ Windows Insets Types ทุกตัวด้านบนครับ)

(เเต่ ! ทั้งหมดนี้ รองรับการใช้งานได้บน Android 11 เท่านั้นครับ)

Dynamic Intent Filters

  • กำหนดได้เเล้วว่าต้องการให้เเอพของเรารองรับการ Share เเละรับ Intent ประเภทอะไรจากเเอพอื่นได้ว่าต้องการให้เเอพของเรารองรับข้อมูลประเภทไหนบ้าง ผ่าน Code ของเราได้เลย เเละเปลี่ยนตอนไหนก็ได้ ! โดยการกำหนด Mime Group ที่เเอพของเรารองรับเท่านี้เองครับ

APK Signature Scheme Version 4

  • เหมะกับการ Build APK ที่มีขนาดใหญ่ เพื่อให้การ Build เเต่ละครั้งรองรับการ Build เเละติดตั้งเเบบ Incremental โดยการติดตั้งเฉพาะส่วนที่มีการเปลี่ยนเเปลง เเละช่วยให้การติดตั้งเเอพเเต่ละครั้งรวดเร็วมากยิ่งขึ้น โดยการใช้คำสั่ง adb install — incremental เเค่นี้เองครับ (เครื่องเราต้องรองรับด้วยนะ)

App Process Exit Reason ดูได้เเล้วว่าเเอพของเราถูกปิด หรือพังเพราะสาเหตุอะไร

  • โดยหลักๆ เเล้วจะมี REASON_ANR / REASON_CRASH / REASON_INITIATION_FAILURE / REASON_USER_REQUESTED เเละอื่นๆ อีกที่เราสามารถดูได้เลยครับ ว่าเเอพของเราพังจากสาเหตุอะไรครับ
  • โดยสามารถขอประวัติได้ว่าเเอพของเราถูกปิดได้จากสาเหตุอะไร ได้หลังจากผู้ใช้เปิดเเอพขึ้นมาใหม่อีกครั้งครับ โดยการสร้าง ActivityManager
  • เเละทำการเรียกใช้คำสั่ง getHistoricalProcessExitReason เพื่อทำการขอข้อมูลได้ครับว่าเเอพของเรา ถูกปิด หรือพังเพราะอะไรนั่นเองครับ

Privacy on Android 11

Scoped Storage Environment

  • หลังจากนี้ต้องทำการเเก้ไขเเอพให้รองรับการเข้าถึงข้อมูลของผู้ใช้เเบบใหม่ใน Android 11 ไม่สามารถใส่ Flag : android:requestLegacyExternalStorage=”true” ได้เหมือนกับเเอนดรอยเวอร์ชั่นก่อนๆ เเล้ว (เเต่ถ้า Target API Level < 30 อันนี้ก็สบายใจได้ครับในส่วนนี้ เเต่จะไม่สามารถใช้ได้บน Android 11 นะ)
  • Use Cases ต่างๆ ที่ทางเเอนดรอยเเนะนำให้นักพัฒนาได้ศึกษาเเละนำมาใช้กับวิธีการเข้าถึงข้อมูลผู้ใช้งานภายในเเอพของตัวเอง : https://developer.android.com/training/data-storage/use-cases

Permission

  • One-Time Permission : สามารถอนุญาตการเข้าถึงได้เเค่ครั้งนี้ครั้งเดียว
  • Auto-reset Permission : ออโต้เพิกถอดสิทธิ์การเข้าถึงต่างๆ ของเเอพนั่นๆเมื่อไม่มีการเข้าถึง หรือใช้งานจากผู้ใช้เป็นระยะเวลานานๆ
  • Permission Dialog Visibility : หากมีการกดปฏิเสธสิทธิ์การเข้าถึงจากผู้ใช้หลายๆ ครั้ง Request Permission Dialog จะทำการซ่อนเเละปฎิเสธการร้องขอให้โดยอัตโนมัติครับ

Foreground Services

  • รองรับการใช้งานเเละการทำงานของเเอพในรูปเเบบของ Foreground Service ไม่ว่าจะเป็นการใช้งาน Location , Microphone เเละ Camera ก็สามารถกำหนด Foreground Service ที่เราต้องการใช้งานได้ใน Manifest เลยครับ

Google Play’s Target API Level Requirement ตั่งเเต่เดือน พฤศจิกายน 2563 นี้เเอพที่เราจะอัพขึ้น Google Play จะต้องกำหนด Target API Letvel เป็น Android 10 (API Level 29) ไม่อย่างงั้นจะไม่สามารถอัพเเอพของเราขึ้น Play Store ได้นะครับ

รายละเอียดเพิ่มเติมบน Android 11 สำหรับนักพัฒนาสามารถเข้าไปดูได้ที่ : https://developer.android.com/about/versions/11

เเละสำหรับใครที่ไม่ได้เข้าร่วมงานภายในวันนี้ เเต่ต้องการรับชมในรูปเเบบออนไลน์ก็สามารถรับชมได้ที่นี่เลยครับ : https://youtu.be/e690tvoW9eg

เเต่เดียวก่อนนน ! ถ้าคุณเป็นนักพัฒนาเเอนดรอย วันที่ 20 ธันวาคม 2563 ที่จะถึงนี้ Google Developer Group Bangkok เค้ามีจัดงาน Android Bangkok Conference 2020 ด้วยนะครับ สามารถเข้าไปดูรายละเอียดตามลิงค์นี้เลย : https://dev.wi.th/event/abc2020

ขอบคุณรูปภาพประกอบบทความจากคลิปวิดีโอ : GDG DevFest 2020

สุดท้ายก็ต้องขอขอบคุณทุกคนที่อ่านบทความนี้จนจบนะครับ ถ้ามีข้อผิดพลาดยังไงก็ต้องขออภัยด้วยครับ เเละขอฝากเเฟนเพจ Facebook : Mr.Focus — มิสเตอร์โฟกัส เเละ YouTube : MISTERFOCUSTH เอาไว้ด้วยนะครับ เเล้วเจอกันในบทความถัดไปครับ สวัสดีครับ…..

--

--

Sila Pakdeewong

1st Year — School of #IT20 Student at KMITL | Student / Tech Blogger / Content Creator / Developer — MS Certified AZ / Data / AI Fundamentals | #JWC12 #MLSA