在Android 4.4和7.0上删除短信

时间:2017-08-19 18:19:12

标签: android c++ c++builder-2010

我使用此代码删除未读短信,但它仅适用于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 );
      }
  }
}

1 个答案:

答案 0 :(得分:3)

从4.4开始,您的应用不允许从收件箱中删除任何短信,除非它是&#34;默认&#34;短信应用。

来自Android自己的文档:

Android 4.4 APIs

  

从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消息写入   短信服务提供商,而您的应用程序不是默认的短信应用程序,它没有   写入已发送的彩信,您的应用无法写入短信   其他操作的提供者,例如将邮件标记为草稿,标记   他们阅读,删除