Wednesday, December 28, 2016

Deprecated methods

每次 android API 升級, 除左加入新野之後, 都會有 D 舊野會被清理.
萬一你用左 D 會被清走既舊野, 就要準備改 code 了.

Google 既做法, 係會先提醒你某 D 野就快死我, 今次比你過, 下次就唔包了.
如果唔想出事至急急腳搵解藥, 可以叫佢每次都 check 埋有邊 D 野就快死.

好簡單, 只要在 build.gradle 加入下面幾行就得了.
為左唔想影響咁大, 改 Module:app 自己既 build.gradle 好了, 將呢幾句加落最尾就得,

tasks.withType(JavaCompile) {
    options.compilerArgs << "-Xlint:deprecation"}

之後再  build APK, 就會出唔到了, 講埋邊度唔得, 原來係 SmsMessage.createFromPdu 出事:
E:\SourceTree\WhereAreYou\app\src\main\java\org\super169\findlocation\FindLocationActivity.java:189: warning: [deprecation] createFromPdu(byte[]) in SmsMessage has been deprecated                    SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
又要上網搵笨法解決了. (1) 最簡單既方法, 咪跟佢既 syntax 比埋個  format 佢就得  (API Level 23) String format = extras.getString("format"); SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i], format);
世事總係無咁好既, 呢個 syntax 係 API Level 23 開始至用得, 即係要改  minSdkVersion 去到 23 或以上, 即係 Android 6.0 Marshmallow 之後既機至用到, 太過份了. 




(2) 用  Telephony 先攞哂 d msg 再慢慢睇  (API Level 19)



SmsMessage[] msgs = msgs = android.provider.Telephony.Sms.Intents.getMessagesFromIntent(intent);
for (int i = 0; i < pdus.length; i++) {
    SmsMessage message = msgs[i];
今次好 D, API Level 19 就有了 (即係 Android 4.4 KitKat 開始).  所以, 針對 SmsMessage.createFromPdu 可以有以下幾個方案:
  1. 唔鬼理佢, 反正家陣仲用得, 可以 keep 住 midSdkVersion 18
  2. 轉用 Telephony 去讀 message, 而 midSdkVersion 只係升上 19, 影響唔算大
  3. 用 SmsMessage.createFromPdu 既新 Syntax, 但 midSdkVersion 就要上 23 至得

No comments:

Post a Comment