SmsMessage.createFromPdu is deprecated in android API level 23

后端 未结 3 1885
庸人自扰
庸人自扰 2021-01-06 04:12

I am trying to read received SMS using below code, it is working below API level 23, but in API level 23 createFromPdu method is deprecated. In google docs it h

相关标签:
3条回答
  • 2021-01-06 04:25

    Here is how you can extract sms:

    private class SMSReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
                SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
                for (SmsMessage message : smsMessages) {
                    // Do whatever you want to do with SMS.
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-06 04:27

    You can extract "format" from the intent's extra and pass it to SmsMessage.createFromPdu. The format is added here, just before the dispatch.

    0 讨论(0)
  • 2021-01-06 04:42

    You can add something like this UPDATED 27/06/2016:

         private class SMSReceiver extends BroadcastReceiver {
                    private Bundle bundle;
                    private SmsMessage currentSMS;
                    private String message;
    
                    @Override
                    public void onReceive(Context context, Intent intent) {
    
                        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
                            bundle = intent.getExtras();
                            if (bundle != null) {
                                Object[] pdu_Objects = (Object[]) bundle.get("pdus");
                                if (pdu_Objects != null) {
    
                                    for (Object aObject : pdu_Objects) {
    
                                        currentSMS = getIncomingMessage(aObject, bundle);
    
                                        String senderNo = currentSMS.getDisplayOriginatingAddress();
    
                                        message = currentSMS.getDisplayMessageBody();
                                        Toast.makeText(OtpActivity.this, "senderNum: " + senderNo + " :\n message: " + message, Toast.LENGTH_LONG).show();
                                    }
                                    this.abortBroadcast();
                                    // End of loop
                                }
                            }
                        } // bundle null
                    }
                }
    
            private SmsMessage getIncomingMessage(Object aObject, Bundle bundle) {
                SmsMessage currentSMS;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    String format = bundle.getString("format");
                    currentSMS = SmsMessage.createFromPdu((byte[]) aObject, format);
                } else {
                    currentSMS = SmsMessage.createFromPdu((byte[]) aObject);
                }
        return currentSMS;
    }
    

    older:

     Object [] pdus = (Object[]) myBundle.get("pdus");
    
        messages = new SmsMessage[pdus.length];
    
        for (int i = 0; i < messages.length; i++)
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                String format = myBundle.getString("format");
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);
            }
            else {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }
            strMessage += "SMS From: " + messages[i].getOriginatingAddress();
            strMessage += " : ";
            strMessage += messages[i].getMessageBody();
            strMessage += "\n";
        } 
    
    0 讨论(0)
提交回复
热议问题