【问题标题】:Delete SMS messages on Android 4.4 and 7.0在 Android 4.4 和 7.0 上删除 SMS 消息
【发布时间】:2017-08-19 18:19:12
【问题描述】:

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

【问题讨论】:

  • 在 7.0 上没有任何反应,就像什么都没发生一样。什么是堆栈跟踪?在 6.0 上未测试
  • 如何获得?

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


【解决方案1】:

从 4.4 开始,您的应用不得从收件箱中删除任何 SMS 消息,除非它是“默认”SMS 应用。

来自 Android 自己的文档:

Android 4.4 APIs

从 Android 4.4 开始,系统设置允许用户选择“默认短信应用”。选择后,只有默认 SMS 应用能够写入 SMS Provider,并且只有默认 SMS 应用在用户收到 SMS 时接收 SMS_DELIVER_ACTION 广播,或者当用户收到 WAP_PUSH_DELIVER_ACTION 广播时收到彩信。默认 SMS 应用程序负责在接收或发送新消息时将详细信息写入 SMS Provider。

其他没有被选为默认短信应用的应用只能读取短信提供者,但也可以通过监听SMS_RECEIVED_ACTION广播,在有新短信到达时得到通知,这是一个可以传送到多个应用程序的不可中止的广播。此广播适用于那些(虽然未被选为默认 SMS 应用)但需要读取特殊传入消息(例如执行电话号码验证)的应用。

如需了解更多信息,请阅读博文Getting Your SMS Apps Ready for KitKat

从那个博客:

如果您的应用被设计为默认 SMS 应用,那么当 您的应用未选择为默认应用,重要的是您 了解对您的应用施加的限制并禁用功能 作为适当的。虽然系统将发送的 SMS 消息写入 SMS Provider 虽然您的应用不是默认的 SMS 应用,但它不是 写入发送的彩信并且您的应用无法写入短信 其他操作的提供者,例如将消息标记为草稿,标记 它们被读取,删除它们,等等。

【讨论】:

  • 是否可以在项目期间为应用程序设置权限,然后可以将其设置为短信的默认应用程序?
  • 不,你不能。您只能通过将您的应用程序设为 SMS 的默认设置来实现它。但用户不会将您的应用设为默认值。因为你要给他们一个短信阅读器。如果你成功了,那就没问题了。
猜你喜欢
  • 2013-11-02
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多