ในที่สุดก็ถึงเวลาการมาของ 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 ด้วยเช่นกัน

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

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

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

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

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

val context: Context = /* ... */
val manager = SubscriptionManager.from(context)

และที่สำคัญคือจะต้องประกาศ 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

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