私はAndroidアプリケーションに取り組んでいます。私のアプリでは、SMS を聞いて会話を表示する必要があるため、次のコードを使用します。
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sender = msgs[i].getOriginatingAddress();
message = msgs[i].getMessageBody().toString();
smsSummary.append(getContactDisplayNameByNumber(sender, context));
smsSummary.append(": ").append(message).append("\n");
}
上記のコードは正常に機能しており、SMS の詳細とコンテンツを取得しています。そのため、SMS コンテンツ プロバイダーからの会話を確認する必要があります。次のコードを使用しました。
getConversation(sender,context);
public void getConversation(Context context){
Uri uri = Uri.parse("content://mms-sms/conversations/");
Cursor c= context.getContentResolver().query(uri, null, null ,null,"DATE desc");
// startManagingCursor(c);
System.out.println("c.getCount()===="+c.getCount());
if(c.moveToFirst()){
for(int i=0;i<c.getCount();i++){
if(sender.equals(c.getString(c.getColumnIndexOrThrow("address")).toString())) {
body_new=c.getString(c.getColumnIndexOrThrow("body")).toString();
date_new=convertToDate(c.getString(c.getColumnIndexOrThrow("date")));
num_new=c.getString(c.getColumnIndexOrThrow("address")).toString();
tid=c.getInt(c.getColumnIndex("thread_id"));
}
c.moveToNext();
}
}
c.close();
}
ある番号から最初の SMS を受信したとき。 getConversation() メソッドはその番号をリストしていません。たとえば、会話がない場合、yyyy から最初の SMS を取得しました。
System.out.println(c.getCount());
ゼロを返します。
番号 xxxx からの会話がある場合のように、yyyy から最初の SMS を取得します。c.getcount() の print ステートメントは 1 つを返します。つまり、xxxx 情報のみを意味します。
yyyy から 2 番目の SMS を受信した場合、問題なく動作します。xxxx と yyyy の両方の会話の詳細を取得します