zac*_*sek 26 sms android deprecated android-6.0-marshmallow
我想创建一个应用程序,当SMS到达并处理该SMS时收到通知,但是读取createFromPdu函数的引用,它声明:
这个方法很快就会被弃用,所有通过处理SMS_RECEIVED_ACTION广播意图来处理传入SMS消息的应用程序现在必须将新格式String extra从intent传递给新方法createFromPdu(byte [],String),这需要额外的格式参数.这是为了在需要同时支持3GPP和3GPP2格式的设备上正确解码PDU所需的,例如双模GSM/CDMA和CDMA/LTE电话.
但是createFromPdu(byte[], String)文档和SDK都缺少该功能.
我该怎么办?我需要支持这些双卡双待手机.
Era*_*sav 27
简而言之,使用这个:
SmsMessage smsMessage;
if (Build.VERSION.SDK_INT >= 19) { //KITKAT         
    SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);              
    smsMessage = msgs[0];            
} else {             
    Object pdus[] = (Object[]) bundle.get("pdus");             
    smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);          
}
    public void onReceive(Context context, Intent intent) {
        SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);
        String format = intent.getStringExtra("format");
        SmsMessage sms = msgs[0];
        Log.v("TAG", "handleSmsReceived" + (sms.isReplace() ? "(replace)" : "") +
                " messageUri: " +
                ", address: " + sms.getOriginatingAddress() +
                ", body: " + sms.getMessageBody());
        String message = sms.getMessageBody();
}
如果要从pdu创建SmsMessage对象,可以使用新的api
  SmsMessage sms2 = SmsMessage.createFromPdu(msgs[0].getPdu(),format);
您没有提及您的目标 Android 版本,但考虑到问题的日期,我假设 Jelly Bean 4.x。
在撰写本文时,我们处于 Lollipop MR1 状态,有关使用带有格式参数的 createFromPdu 的弃用说明仍然有效:
但是,您可以使用电话提供程序 API,而不是直接使用该 API getMessagesFromIntent:
 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.2_r1/android/提供商/Telephony.java/#686
该方法考虑 PDU 格式(以及 Lollipop 中多 SIM 设备的订阅 ID),并为您提供 SmsMessage 实例的数组。
它的使用示例可以在 Google 的 MMS 应用程序中看到:
https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/transaction/SmsReceiverService.java(请参阅handleSmsReceived)
| 归档时间: | 
 | 
| 查看次数: | 15256 次 | 
| 最近记录: |