Android 我如何在安卓系统中阅读短信?

Android 我如何在安卓系统中阅读短信?,android,sms,whatsapp,Android,Sms,Whatsapp,我想知道一件关于短信的事 我知道在Android中阅读短信是可能的,但我不知道如何阅读“未读短信”,尤其是如何进入“发件人”、“短信”、“日期”、“时间”、“文本”等各个字段 我必须做的是:当收到sms时,应用程序“读取”消息并将所有信息存储在数据结构中 重要: 另一个问题:是否可以在WhatsApp或其他IM应用程序(例如facebook messenger)中阅读“未读短信”? 在这种情况下,我如何进入每个领域 问候阅读手机短信 看看这个 阅读Facebook消息 对于facebook,您需

我想知道一件关于短信的事

我知道在Android中阅读短信是可能的,但我不知道如何阅读“未读短信”,尤其是如何进入“发件人”、“短信”、“日期”、“时间”、“文本”等各个字段

我必须做的是:当收到sms时,应用程序“读取”消息并将所有信息存储在数据结构中

重要: 另一个问题:是否可以在WhatsApp或其他IM应用程序(例如facebook messenger)中阅读“未读短信”? 在这种情况下,我如何进入每个领域


问候阅读手机短信

看看这个

阅读Facebook消息


对于facebook,您需要实现他们的API。看到这个了吗

阅读Whatsapp消息 选项1

Whatsapp没有发布任何官方API

有一个用于与whatsapp通信的开源API,它不是官方的,如果whatsapp更新其协议,它可能会停止工作

关于使用此API或其他非官方API的合法性,这取决于您与Whatsapp达成的服务协议。阅读这篇文章,看看他们是否不赞成与其他客户使用他们的通信协议。我猜他们是不允许的

选项2

WhatsApp每天早上4点在SD卡上备份聊天记录。这是使用AES密钥加密的单个数据库。由于它位于外部存储上,因此如果您有权访问外部存储,应用程序可以读取它

你可以很容易地解密这个数据库(网上有一篇文章)

但是,这只会让你每24小时更新一次聊天记录

如果你想要更多的实时更新,你的设备必须是根设备,你需要一个全新的解析器,因为在内部存储中,聊天记录存储在多个数据库中

选项3

读这个问题

注意:我不确定Whatsapp的内容。这只是各种帖子的汇总

最简单的函数

为了阅读短信,我编写了一个返回对话对象的函数:

class Conversation(val number: String, val message: List<Message>)
class Message(val number: String, val body: String, val date: Date)

fun getSmsConversation(context: Context, number: String? = null, completion: (conversations: List<Conversation>?) -> Unit) {
        val cursor = context.contentResolver.query(Telephony.Sms.CONTENT_URI, null, null, null, null)

        val numbers = ArrayList<String>()
        val messages = ArrayList<Message>()
        var results = ArrayList<Conversation>()

        while (cursor != null && cursor.moveToNext()) {
            val smsDate = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.DATE))
            val number = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS))
            val body = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.BODY))

            numbers.add(number)
            messages.add(Message(number, body, Date(smsDate.toLong())))
        }

        cursor?.close()

        numbers.forEach { number ->
            if (results.find { it.number == number } == null) {
                val msg = messages.filter { it.number == number }
                results.add(Conversation(number = number, message = msg))
            }
        }

        if (number != null) {
            results = results.filter { it.number == number } as ArrayList<Conversation>
        }

        completion(results)
    }
或者只获取特定号码的对话:

getSmsConversation(this, "+33666494128"){ conversations ->
    conversations.forEach { conversation ->
        println("Number: ${conversation.number}")
        println("Message One: ${conversation.message[0].body}")
        println("Message Two: ${conversation.message[1].body}")
    }
}

看看这个,我已经读过这个问题了,但是没有回答我问题的第二部分:)对于facebook,你需要实现他们的api。我想我的帖子回答了所有这三个问题。它真的能在不同厂商的所有安卓设备上运行吗?
getSmsConversation(this, "+33666494128"){ conversations ->
    conversations.forEach { conversation ->
        println("Number: ${conversation.number}")
        println("Message One: ${conversation.message[0].body}")
        println("Message Two: ${conversation.message[1].body}")
    }
}