在Android上设置为默认短信应用时,是否需要写入SMS提供商?

时间:2015-12-05 01:10:52

标签: java android smsmanager

我在Android KitKat +上阅读了关于默认短信应用行为的this blogthis doc。两人都说:

  

...当且仅当应用未被选中作为默认短信应用时,   系统自动将使用此方法发送的消息写入SMS   提供者(默认的SMS应用程序始终负责编写它   发送消息给SMS提供商。)

所以,我想从我的代码中的一个地方说我需要发送短信。我使用这段代码:

SmsManager smsManager = SmsManager.getDefault();

        smsManager.sendMultipartTextMessage(
                phoneNumber,
                null,
                smsManager.divideMessage(data),
                null, null);

现在,当未设置为默认应用时,我可以确认从我的应用发送后,短信会显示在默认应用中。如果我是设备上的默认应用程序,我该如何插入短信?我在哪里调用此插入,是否有一些方法需要重载?

当接收到SMS时,在接收器类中,我是否也将SMS写入内部SMS数据库?又如何?

非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

  

如果我是设备上的默认应用,我该如何插入短信?

您可以按照添加到任何ContentProvider的方式执行此操作;在insert()上使用ContentResolverTelephony.Sms.Sent.CONTENT_URI对象调用ContentValues及相关数据。

  

我在哪里调用此插入,是否有一些方法需要重载?

你不需要超载任何东西。只需在收到已发送insert()的结果时进行相应的PendingIntent调用,该结果将作为示例sendMultipartTextMessage()调用中的第四个参数传递。根据结果​​,您可能需要插入类型为STATUS_FAILED的消息。

  

当收到短信时,在接收器类中,我是否也将短信写入内部短信数据库?

我不确定您对内部SMS数据库的意思,但默认应用程序负责将所有传入的消息写入提供程序,您将以与上述相同的方式执行此操作,但使用{{ 1}}。如果您的应用程序有自己独立的数据库,您也可以使用标准数据库API写入该数据库。