Я использую этот код для удаления непрочитанных SMS-сообщений, но он работает только на Android 4.4, а не на Android 7.0. Что мне нужно изменить в коде, чтобы он работал на Android 7.0?
void __fastcall TForm1::Button4Click(TObject *Sender)
{
_di_JCursor cursor;
_di_Jnet_Uri uri;
uri = StrToJURI( "content://sms" );
cursor = SharedActivity()->getContentResolver()->query( uri, nullptr, StringToJString(L"read = 0"), nullptr, nullptr );
if ( cursor )
{
while( cursor->moveToNext() )
{
int adresidx = cursor->getColumnIndex( StringToJString(L"address") );
int sms_id = cursor->getColumnIndex( StringToJString(L"_id") );
String adres = JStringToString( cursor->getString(adresidx) );
String smsid = JStringToString( cursor->getString(sms_id) );
TJavaObjectArray__1<_di_JString> *arg = new TJavaObjectArray__1<_di_JString>(1);
arg->Items[0] = StringToJString(smsid);
SharedActivity()->getContentResolver()->Delete( uri, StringToJString("_ID=?"), arg );
}
}
}
Начиная с версии 4.4, вашему приложению не разрешается удалять любые SMS-сообщения из входящих сообщений, если только это не SMS-приложение «по умолчанию».
Из собственной документации Android:
Начиная с Android 4.4, системные настройки позволяют пользователям выбирать «приложение SMS по умолчанию». После выбора только SMS-приложение по умолчанию может писать в SMS-провайдер и только приложение SMS по умолчанию получает
SMS_DELIVER_ACTION
трансляция, когда пользователь получает SMS илиWAP_PUSH_DELIVER_ACTION
трансляция, когда пользователь получает MMS. Приложение SMS по умолчанию отвечает за запись сведений поставщику SMS при получении или отправке нового сообщения.Другие приложения, которые не выбраны в качестве приложения SMS по умолчанию, могут только читать поставщика SMS, но также могут быть уведомлены, когда приходит новое SMS, прослушивая
SMS_RECEIVED_ACTION
широковещательная рассылка, которая не подлежит прерыванию, может быть доставлена нескольким приложениям. Эта трансляция предназначена для приложений, которые — хотя и не выбраны в качестве приложения SMS по умолчанию — должны читать специальные входящие сообщения, например, для проверки номера телефона.Для получения дополнительной информации читайте пост в блоге, Готовим ваши SMS-приложения для KitKat
И из этого блога:
если ваше приложение предназначено для работы в качестве приложения SMS по умолчанию, тогда
ваше приложение не выбрано по умолчанию, важно, чтобы вы
понять ограничения, накладываемые на ваше приложение, и отключить функции
по мере необходимости. Хотя система пишет отправленные SMS-сообщения на
Поставщик SMS, пока ваше приложение не является приложением SMS по умолчанию, оно не
написать отправленные MMS-сообщения и ваше приложение не умеет писать в смс
Провайдер для других операций, например, пометить сообщения как черновик, пометить
их как прочитали, удалить их, и т.п.
Других решений пока нет …