我正在尝试在模拟器中接收短信。这段代码几乎是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;
}
}
答案 0 :(得分:0)
在您的gradle模块中,您正在针对api 25编译,但是您的目标是api 22,如果您将taget更改为25,则您的错误应该消失。