【问题标题】:Android: Delete SMS at particular threadId locationAndroid:在特定的threadId位置删除短信
【发布时间】:2011-03-07 11:13:39
【问题描述】:

我正在尝试了解手机和手机上的软件之间的区别。我在 Droid Incredible 上进行编码和测试。 content://sms 的内容观察者工作正常,我可以删除 Incredible 上的 threadId,但我的应用程序在 Moto Droid Milestone 上崩溃。我使用 Milestone 模拟器包使用 Moto Dev Studio 测试 Milestone。它在模拟器中可以正常工作,但在实际设备上却不行。

为什么 content://sms 在 Incredible 上可以正常工作,但在 Milestone 上却不行?为什么它可以在 Milestone 模拟器上运行,而不是在 Milestone 设备上运行?

这样的删除方法如下所示,uri为content://sms + threadId

getContentResolver().delete(deleteUri, "address=? and date=?", new String[] {msg.getOriginatingAddress(), String.valueOf(msg.getTimestampMillis())});

很多人说这样的内容观察者不是 SDK 的一部分。明白了。如何出于正当原因删除短信,例如创建一个单独的应用程序,该应用程序使用密码将短信与主短信系统分开存储?

【问题讨论】:

    标签: android sms observer-pattern


    【解决方案1】:

    为什么 content://sms 可以正常工作 难以置信,但不在 里程碑

    因为,正如我一直指出的那样,content://sms 不是 Android SDK 的一部分。没有理由相同。欢迎设备制造商对其进行更改、消除等。谷歌已经告诉你not to use it。日历内容提供者已经经历了类似的修改,对应用程序产生了类似的影响。这些只是作为应用程序一部分的提供程序,它们不打算供开发人员使用。

    我怎样才能删除合法的短信 原因,例如创建一个单独的 带有密码的应用程序 将短信分开存储 来自主短信系统。

    您不能从其他 SMS 应用程序中删除消息并坚持在 SDK 的范围内。尝试从 SMS 内容提供商中删除消息可能无法在某些设备上运行,可能对其他设备没有影响,可能会导致其他应用程序在其他设备上崩溃,等等。

    就此而言,您不能创建单独的 SMS 应用程序并坚持在 SDK 的范围内,因为您需要接收的 Intent 没有记录(尽管广为人知)。例如,某些设备制造商选择更改此Intent 以使用不同的操作并非不可能。这至少不太可能,因为这将是操作系统更改而不是对某些随机应用程序(例如,消息传递,所谓的 SMS 内容提供商的所在地)的更改。但是,这是可能的。

    【讨论】:

    • 好吧。直接来自谷歌。好贴。明白了。无法与 Google 博客文章争论。
    • 如果它是访问 SMS 以删除消息的唯一方法,我如何确定特定手机/型号的可用内容提供商?我可以创建内容提供者吗?我认为没有理由放弃删除短信的问题,这似乎应该是合理的,如果我需要为每个型号的设备创建一个开关,那就这样吧。
    • @Noah Seidman:“我如何确定特定手机/型号的可用内容提供商?”每部手机都买一部,然后试着找到它。或者也许制定一些众包解决方案。请记住,有些手机可能根本没有这样的内容提供商,因为他们的 SMS 应用程序选择不公开。 “我可以创建内容提供商吗?”当然,但不适用于短信。您无法访问底层数据库或其他数据存储。
    • 非常感谢!!感谢您的患者和洞察力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多