我在Android KitKat +上阅读了关于默认短信应用行为的this blog和this doc。两人都说:
...当且仅当应用未被选中作为默认短信应用时, 系统自动将使用此方法发送的消息写入SMS 提供者(默认的SMS应用程序始终负责编写它 发送消息给SMS提供商。)
所以,我想从我的代码中的一个地方说我需要发送短信。我使用这段代码:
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendMultipartTextMessage(
phoneNumber,
null,
smsManager.divideMessage(data),
null, null);
现在,当未设置为默认应用时,我可以确认从我的应用发送后,短信会显示在默认应用中。如果我是设备上的默认应用程序,我该如何插入短信?我在哪里调用此插入,是否有一些方法需要重载?
当接收到SMS时,在接收器类中,我是否也将SMS写入内部SMS数据库?又如何?
非常感谢你的帮助
答案 0 :(得分:2)
如果我是设备上的默认应用,我该如何插入短信?
您可以按照添加到任何ContentProvider
的方式执行此操作;在insert()
上使用ContentResolver
和Telephony.Sms.Sent.CONTENT_URI
对象调用ContentValues
及相关数据。
我在哪里调用此插入,是否有一些方法需要重载?
你不需要超载任何东西。只需在收到已发送insert()
的结果时进行相应的PendingIntent
调用,该结果将作为示例sendMultipartTextMessage()
调用中的第四个参数传递。根据结果,您可能需要插入类型为STATUS_FAILED
的消息。
当收到短信时,在接收器类中,我是否也将短信写入内部短信数据库?
我不确定您对内部SMS数据库的意思,但默认应用程序负责将所有传入的消息写入提供程序,您将以与上述相同的方式执行此操作,但使用{{ 1}}。如果您的应用程序有自己独立的数据库,您也可以使用标准数据库API写入该数据库。