มีอะไรบ้างใน Android 5.1 Lollipop MR1 [แบบฉบับนักพัฒนา]
ในที่สุดก็ถึงเวลาการมาของ 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
เปลี่ยนเยอะเหมือนกันนะนี่