我使用此代码删除未读短信,但它仅适用于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 );
}
}
}
答案 0 :(得分:3)
从4.4开始,您的应用不允许从收件箱中删除任何短信,除非它是&#34;默认&#34;短信应用。
来自Android自己的文档:
从Android 4.4开始,系统设置允许用户选择&#34;默认短信应用。&#34;选中后,只有默认短信应用才能写入短信服务提供商,当用户收到短信或
SMS_DELIVER_ACTION
时,只有默认短信应用会收到WAP_PUSH_DELIVER_ACTION
广播当用户收到彩信时广播。默认的SMS应用程序负责在收到或发送新消息时向SMS提供商写入详细信息。未选择作为默认短信应用的其他应用只能读取短信服务提供商,但也可能会在收到
SMS_RECEIVED_ACTION
广播时收到新短信时收到通知是一种不可中止的广播,可以传送到多个应用程序。此广播适用于以下内容 - 虽然未被选为默认短信应用程序 - 需要阅读特殊的传入消息,例如执行电话号码验证。有关详情,请参阅博客文章Getting Your SMS Apps Ready for KitKat
来自那篇博客:
如果您的应用程序设计为默认的SMS应用程序,那么 您的应用未被选为默认应用,对您而言非常重要 了解应用程序的限制并禁用功能 作为适当的。虽然系统将发送的SMS消息写入 短信服务提供商,而您的应用程序不是默认的短信应用程序,它没有 写入已发送的彩信,您的应用无法写入短信 其他操作的提供者,例如将邮件标记为草稿,标记 他们阅读,删除等