Я использую библиотеку Telephony.Sms для загрузки полученных и отправленных смс-сообщений для приложения, над которым я работаю. Когда я установлю выбор запроса на ноль (третий элемент в запросе), он будет показывать все отправленные и полученные смс-сообщения на разных типах телефонов, на которых я тестировал.
Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, null, null, null);
Но когда я установил его на определенный номер, на телефоне Samsung S9, работающем по API 27, он не показывает никаких смс-сообщений. В Nexus, работающем по API 23, он будет отображать полученные сообщения, но не отправленные сообщения в виде списка. На телефоне Huawei, работающем по API 22, все работает правильно, показывая отправленные и полученные сообщения с определенным номером.
Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, sms, null, null);
Вот полный код, извлекающий отправленные и полученные смс-сообщения для определенного номера телефона.
@WithPermissions(permissions = {Manifest.permission.READ_SMS})
public void getAllSms(Context context)
{
// Number needs to saved in +614 format
String phoneNumber = SelectedPhNo;
String sms = "address='"+ phoneNumber + "'";
ContentResolver cr = context.getContentResolver();
Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null , null , null , null); // Sms not showing up on Raza's phone
int totalSms = 0;
String type = null;
if(c != null)
{
totalSms = c.getCount();
if(c.moveToFirst())
{
for(int j = 0; j < totalSms; j++)
{
String smsDate = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.DATE));
String body = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.BODY));
switch(Integer.parseInt(c.getString(c.getColumnIndexOrThrow(Telephony.Sms.TYPE))))
{
case Telephony.Sms.MESSAGE_TYPE_INBOX:
type = "inbox";
break;
case Telephony.Sms.MESSAGE_TYPE_SENT:
type = "sent";
break;
case Telephony.Sms.MESSAGE_TYPE_OUTBOX:
type = "outbox";
break;
default:
break;
}
// Convert smsDate to readable format
Long date = Long.parseLong(smsDate);
// Convert millis value to proper format
Date dateVal = new Date(date);
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy");
dateText = format.format(dateVal);
//Toast.makeText(context, "Message present", Toast.LENGTH_SHORT).show();
inboxArrayAdapter.add("Command: " + body + "\n" + "Date: "+ dateText);
// Iterate through the list of SMS messages to be displayed in the listview
c.moveToNext();
// Update listview as soon as we receive a new message
((BaseAdapter)inboxmessages.getAdapter()).notifyDataSetChanged();
inboxArrayAdapter.notifyDataSetChanged();;
}
}
}
else
{
Toast.makeText(getContext(), "No Messages found for this contact!", Toast.LENGTH_SHORT).show();
}
}