11 March 2015

มีอะไรบ้างใน Android 5.1 Lollipop MR1 [แบบฉบับนักพัฒนา]

Updated on


        ในที่สุดก็ถึงเวลาการมาของ Android 5.1 แล้ว~ ซึ่งออกมาอย่างเงียบๆ ไม่ได้เปิดตัวเหมือนกับ Major Change รุ่นก่อนๆ ทั้งนี้ก็เพราะว่าเจ้า Android 5.1 เสมือนมาเพื่อปรับปรุงแก้บั๊กของ Android 5.0 ซะมากกว่านั่นเอง

        แต่ถึงกระนั้นก็มาดูกันเถอะว่าใน Android 5.1 นี้มี API อะไรใหม่ๆเพิ่มเข้ามา หรือมีอะไรเก่าๆที่เปลี่ยนไปบ้าง

API Level เปลี่ยนเป็น 22

        สำหรับในเวอร์ชันนี้จะมีเชื่อเรียกตามประสา Dev ว่า Lollipop MR1 (MR = Maintenance Release) และปรับ API Level จาก 21 มากลายเป็น 22 แทนแล้ว ดังนั้นเวลาสร้างโปรเจคใดๆใหม่ๆก็อย่าลืมเปลี่ยนเลขเวอร์ชันด้วยล่ะ

SDK Platform สำหรับ Android 5.1

        ถึงแม้ว่าการออกเวอร์ชันนี้จะเหมือนแก้บั๊ก แต่ก็เป็นการปรับปรุงที่ค่อนข้างใหญ่พอสมควรถึงกับออกเป็นเลขเวอร์ชันระดับ Major Change ได้ ดังนั้นก็ต้องมี SDK Platform สำหรับนักพัฒนา และรวมไปถึง System Image ด้วยเช่นกัน (ส่วนเจ้าของบล็อกจะรอของ Genymotion แทน)


        สำหรับ System Image จะมีหลายรุ่นมาก ก็โปรดดาวน์โหลดเท่าที่จำเป็นก็พอนะครับ โดยเฉพาะมือใหม่

เพิ่ม API สำหรับ Multiple SIM Card Support

        ตอนแรกที่ได้ข่าวของการอัพเดทเวอร์ชันนี้ น้ำตาเจ้าของบล็อกแทบจะไหลรั่วกันเลยทีเดียว เพราะว่ารอมานานมากๆ เพราะเดิมทีพวกแอนดรอยด์ที่รองรับ 2 ซิมขึ้นไปนั้นมาจากการที่ผู้ผลิตแต่ละเจ้านั้นทำเอง จึงทำให้ไม่มี API เข้าไปยุ่งเกี่ยวกับมันได้เลย


        และเมื่อเวอร์ชันนี้มี API รองรับ Multiple SIM Card แล้ว ก็หมายความว่านักพัฒนาสามารถเขียนแอพเข้าไปจัดการกับเครื่องที่รองรับหลายๆซิมได้แล้ว เย้!

        โดยจะมีสองคลาสหลักที่ทำหน้าที่จัดการกับความสามารถใหม่นี้ นั่นก็คือ SubscriptionManager สำหรับจัดการกับ SIM Card และ SubscriptionInfo สำหรับข้อมูลเกี่ยวกับ SIM Card นั้นๆ ซึ่งคลาส SubscriptionManager ให้กำหนดค่าผ่านคำสั่ง

SubscriptionManager sm = SubscriptionManager.from(context);

        โดยที่เจ้าคำสั่ง from ก็จะไปเรียกใช้คำสั่ง

context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

        และที่สำคัญคือจะต้องประกาศ Permission ไว้ใน Android Manifest ดังนี้

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >

เลิกใช้คลาส AndroidHttpClient แล้ว

        เดิมทีคลาสนี้ถูกสร้างขึ้นมาให้ใช้งานตั้งแต่สมัย API 8 หรือ Android 2.2 แล้ว แต่ใน Android 5.1 ก็ได้ประกาศเลิกใช้งานแล้ว กลายเป็น Deprecated แทน รวมไปถึงคลาสของตระกูล Apache HTTP ก็ด้วย และแนะนำให้เปลี่ยนไปใช้คลาส URLConnection หรือคลาสตระกูลนั้นแทน

เพิ่มคลาสและคำสั่งสำหรับผู้ให้บริการเครือข่าย

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

        โดยคำสั่งดังกล่าวจะถูกเพิ่มเข้ามาในคลาส TelephonyManager และ SmsManager ซึ่งก็เกี่ยวข้องกับ Multiple SIM Card Support ด้วยนั่นแหละ

        และเพิ่ม Service Class ตัวใหม่ที่ชื่อว่า CarrierMessagingService เข้ามาเพื่อช่วยจัดการ Event เมื่อมีการรับ/ส่งข้อมูล SMS หรือ MMS โดย Service Class ตัวนี้จะต้องประกาศ Permission ไว้ตอนที่ประกาศ Service ใน Android Manifest ด้วย

        Permission สำหรับคลาสนี้ คือ

android.permission.BIND_CARRIER_MESSAGING_SERVICE

        และนอกจากนี้ยังมี Action ใหม่เพิ่มเข้ามาสำหรับ Intent Filter สำหรับ Service Class ตัวนี้ด้วยล่ะ

android.service.carrier.CarrierMessagingService


        ทั้งหมดก็มีเท่าที่เห็นนี่แหละ (เพราะเอาเข้าจริงเวอร์ชันนี้มาเหมือนแก้บั๊กมากกว่า) ทีนี้ก็มาดูยิบย่อยกันบ้าง ว่ามีคำสั่งอะไรเพิ่มหรือเปลี่ยนไปบ้าง

อื่นๆ

        • เพิ่มธีมใหม่ ชื่อ Theme_DeviceDefault_Dialog_Alert และ Theme_DeviceDefault_Light_Dialog_Alert

        • ยกเลิกคำสั่ง removeAccount ในคลาส AccountManager ให้ไปใช้คำสั่ง removeAccount อีกแบบที่เพิ่มเข้ามาใหม่ในเวอร์ชันนี้ (ต่างกันที่ว่าคำสั่งแบบใหม่จะมีคลาส Activity เพิ่มเข้ามาใน Parameter ด้วย)

        • เพิ่มคำสั่ง setCurrentFraction ในคลาส ValueAnimator เพื่อให้กำหนดค่า Fraction ณ ตอนนั้นๆได้ทันที


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

        • เพิ่ม Callback ที่ชื่อว่า onMtuChanged เข้ามาในคลาส BluetoothGattServerCallback ของ Bluetooth Low Energy เพื่อให้ดัก Event เมื่อค่า MTU มีการเปลี่ยนแปลงได้

        • เพิ่ม Service เข้ามาในคลาส Context อีกสองตัวคือ TELEPHONY_SUBSCRIPTION_SERVICE สำหรับเรียกใช้งานคลาส SubscriptionManager และ USAGE_STATS_SERVICE สำหรับเรียกใช้งานคลาส UsageStatsManager

        • ยกเลิกคำสั่ง getDrawable ในคลาส Resources ให้เปลี่ยนไปใช้คำสั่ง getDrawable อีกตัวแทน และคำสั่ง getDrawableForDensity ให้เปลี่ยนไปใช้คำสั่ง getDrawableForDensity อีกตัวแทน

        • เพิ่มคำสั่ง setOffset ในคลาส Outline เพื่อให้กำหนด Offset ของเส้น Outline ได้

        • เพิ่ม Field สำหรับคลาส CameraMetaData ของ Camera API 2 เข้ามาใหม่อีก 3 ตัว คือ CONTROL_SCENE_MODE_HDR สำหรับเปิดใช้งาน HDR Mode และ REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE สำหรับเช็คว่าเครื่องรองรับการถ่ายภาพแบบ Burst Shot หรือไม่ และ REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS สำหรับเช็คว่าเครื่องรองรับการอ่านค่าเซ็นเซอร์ของกล้องได้หรือไม่ (พวก Exposure Time, Aperture และ Focus Distance)

        • เพิ่ม Field ของคลาส TvContract.Programs.Genres เข้ามาใหม่อีก 6 ตัว ที่เอาไว้แยกประเภทของรายการทีวี โดยเพิ่มเข้ามาอีก 6 ประเภทคือ ARTS ENTERTAINMENT LIFE_STYLE MUSIC PREMIER และ TECH_SCIENCE

        • เพิ่ม Version Code สำหรับ Android 5.1 เข้ามาใน Build.VERSION_CODES โดยเพิ่มเข้ามาเป็น Build.VERSION_CODES.LOLLIPOP_MR1 ที่มีค่าเท่ากับ 22

        • เพิ่ม Field ของคลาส Settings เข้ามาใหม่อีก 2 ตัว คือ ACTION_BATTERY_SAVER_SETTINGS สำหรับสั่งให้เปิด Activity ของหน้าตั้งค่า Battery Saver และ ACTION_NOTIFICATION_LISTENER_SETTINGS สำหรับสั่งให้เปิด Activity ของหน้าตั้งค่า Notification Access

        • ยกเลิก Field ทั้งหมดในคลาส DateFormat

        • ยกเลิกการใช้คลาส Time โดยให้เปลี่ยนไปใช้คลาส GregorianCalendar แทน

        • เพิ่มคลาส BaseInterpolator ซึ่งเป็นคลาสที่สร้างมาจาก Interpolator ธรรมดาๆ (เป็น Abstract Class)

        • ย้าย Super Class ของ Interpolator ทุกตัว ไม่ว่าจะเป็น AccelerateInterpolator,  BounceInterpolator หรือ LinearInterpolator ที่จากเดิมมี Super Class เป็น android.view.animation.Interpolator ให้เปลี่ยนไปใช้ android.view.animation.BaseInterpolator เพื่อทำหน้าที่เป็น Super Class แทน

        • เปลี่ยนคำสั่งหลายๆตัวที่อยู่ใน WebSettings ให้กลายเป็น Abstract Method แทน

        • เพิ่ม Constructor สำหรับ PopupMenu เข้ามาใหม่อีกตัว

        • ยกเลิกการใช้ทุกคลาสที่อยู่ใน org.apache.http ทั้งหมด


        ที่เห็นนี่เป็นแค่ส่วนหนึ่งของการเปลี่ยนแปลงคำสั่งใน Android 5.1 นะครับ สามารถดูรายละเอียดการเปลี่ยนแปลงทั้งหมดได้ที่ Android API Differences Report

        เปลี่ยนเยอะเหมือนกันนะนี่