Я использовал метод, созданный для чтения SMS-сообщений с определенного номера и загрузки его в просмотр списка с помощью этого вопроса, который я написал. SMS-сообщения определенного номера, не отображаемые на других устройствах Android .
Метод getAllSms (getContext ());больше не вызывается на уровне API 28. Я не понимаю, почему он больше не работает, потому что я ничего не изменил, потому что раньше он работал совершенно нормально.Даже если я поставлю точку останова на то место, где вызывается метод, он просто игнорируется, но на уровне API 22 он работает совершенно нормально.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_commands_view, container, false);
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED)
{
}
else
{
// Function to load in SMS messages no longer being called on API 28
getAllSms(getContext());
}
return view;
}
@WithPermissions(permissions = {Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS})
@TargetApi(Build.VERSION_CODES.M)
public void getAllSms(Context context)
{
HashSet<String> phoneSet = new HashSet<>();
phoneSet.add(SelectedPhNo); // phoneNumber
long threadId = Telephony.Threads.getOrCreateThreadId(context, phoneSet);
Uri threadUri = ContentUris.withAppendedId(Telephony.Threads.CONTENT_URI, threadId);
String[] projection = new String[] {Telephony.MmsSms.TYPE_DISCRIMINATOR_COLUMN, BaseColumns._ID, Telephony.Sms.Conversations.THREAD_ID,
Telephony.Sms.ADDRESS, Telephony.Sms.BODY, "sort_index", Telephony.Sms.DATE_SENT, Telephony.Sms.DATE,
Telephony.Sms.READ, Telephony.Sms.TYPE, Telephony.Sms.STATUS, Telephony.Sms.LOCKED,
Telephony.Sms.ERROR_CODE, Telephony.Sms.SEEN, Telephony.Sms.Inbox.BODY, Telephony.Sms.Sent.BODY};
Cursor cur = context.getContentResolver().query(threadUri, projection, null, null, "normalized_date desc");
DatabaseUtils.dumpCursor(cur);
// Read cursor into an arraylist
ArrayList<String> mArrayList = new ArrayList<String>();
int totalSms = cur.getCount();
if(cur.moveToFirst())
{
for(int i = 0; i < totalSms; i++)
{
String body = cur.getString(cur.getColumnIndex(Telephony.Sms.BODY));
String indexDate = cur.getString(cur.getColumnIndex(Telephony.Sms.DATE));
// Convert string to long variable
Long date = Long.parseLong(indexDate);
// Convert millis value to proper format
Date dateVal = new Date(date);
//"dd-MMM-yyyy""dd/MM/yyyy"
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy");
dateText = format.format(dateVal);
cur.moveToNext();
inboxArrayAdapter.add("Command: " + body + "\n" + "Date: " + dateText);
Log.e("Body", body);
Log.e("Date", dateText);
}
}
}