不推荐使用的createFromPdu出错

时间:2017-05-11 10:02:17

标签: java android

我正在尝试在模拟器中接收短信。这段代码几乎是android API提供的基本代码。 但是createFromPdu((byte[]) objs[i], format);代码中存在错误,并且SmsMessage中的错误信息createFromPdu(byte[])无法应用于 (byte[], java.lang.String)。 然后我搜索了它,createFromPdu(byte[] pdu)已弃用,createFromPdu(byte[] pdu, String format)超过23。 但即使我的 compilesdkversion 为25,也会出错。 有人可以帮我解决这个问题吗?

public class SmsReceiver extends BroadcastReceiver {
    public static final String TAG = "SmsReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        Log.i(TAG, "onReceive() method called.");

        Bundle bundle = intent.getExtras();
        SmsMessage[] messages;
        messages = parseSmsMessage(bundle);

        if( messages != null && messages.length > 0) {
            String sender = messages[0].getOriginatingAddress();
            Log.i(TAG, "SMS sender : " + sender);

            String contents = messages[0].getMessageBody().toString();
            Log.i(TAG, "SMS contents : " + contents);

            Date receivedDate = new Date(messages[0].getTimestampMillis());
            Log.i(TAG, "SMS received date : " + receivedDate.toString());
        }
    }

    private SmsMessage[] parseSmsMessage(Bundle bundle) {

        Object[] objs = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[objs.length];



        int smsCount = objs.length;
        for (int i = 0; i < smsCount; i++) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // over API 23 
                String format = bundle.getString("format");
                messages[i] = SmsMessage.createFromPdu(**(byte[]) objs[i], format**);
            } else {
                messages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
            }
        }
        return messages;
    }
}

1 个答案:

答案 0 :(得分:0)

在您的gradle模块中,您正在针对api 25编译,但是您的目标是api 22,如果您将taget更改为25,则您的错误应该消失。