在 Android 上设置为默认 SMS 应用程序时,我是否需要写入 SMS Provider?

Do I need to write into SMS Provider when set as default SMS app on Android?

我阅读了 this blog and this doc 关于 Android KitKat+ 上的默认 SMS 应用行为。两者都说:

...if and only if an app is not selected as the default SMS app, the system automatically writes messages sent using this method to the SMS Provider (the default SMS app is always responsible for writing its sent messages to the SMS Provider).

所以假设我需要从我的代码中的一个地方发送 SMS。我使用此代码:

SmsManager smsManager = SmsManager.getDefault();

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

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

收到短信后,在接收器class中,我是否也将短信写入内部短信数据库?再一次,如何?

非常感谢您的帮助

If I were the default app on device, how do I insert the SMS?

您可以按照添加到任何 ContentProvider 的相同方式进行操作;通过使用 Telephony.Sms.Sent.CONTENT_URIContentResolver 上调用 insert() 和具有相关数据的 ContentValues 对象。

Where do I call this insert, is there some method that needs to be overloaded?

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

的消息

And when SMS is received, in the receiver class, do I write the SMS into internal SMS database as well?

我不确定您所说的内部 SMS 数据库是什么意思,但默认应用程序负责将所有传入消息写入提供程序,您可以按照上述相同的方式执行此操作,但使用 Telephony.Sms.Inbox.CONTENT_URI。如果您的应用有自己独立的数据库,您也可以使用标准数据库 API.

写入该数据库