エミュレータでSMSを受信しようとしています。そして、このコードは、アンドロイドAPIによって与えられたほぼ基本的なコードです。 createFromPdu((byte[]) objs[i], format);
コードにエラーがあり、SmsMessageのエラーメッセージcreateFromPdu(byte[])
は (byte[], java.lang.String)
には適用できません。 は、その後、私はそれを検索し、createFromPdu(byte[] pdu)
誰かがこの問題で私を助けることができる非推奨とcreateFromPdu(byte[] pdu, String format)
は23 上で利用可能である。しかし、私のcompilesdkversionが25 であっても、それはエラーを持っているのですか?あなたは、API 25に対してコンパイルされていますが、API 22をターゲットしているあなたのGradleモジュールで廃止予定のcreateFromPduのエラー
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;
}
}
Android Studioのこの種のエラーは、予想されるパラメータの種類と見つかったパラメータの種類を表示します。パラメータの型にミスマッチがある可能性が非常に高いです。 – Juan
いいえ、しかし、私はAndroid APIで第2のパラメータがStringであることを確認しました。 だから私は、パラメータの種類が一致していないと思います。 –
私はparseSmsMessage()を私のプロジェクトに貼り付けましたが、私はエラーを受け取りません。あなたはgradleモジュールファイル(ussuallyアプリケーションモジュール)を投稿できますか? OK – Juan