美文网首页
红米系统短信机制

红米系统短信机制

作者: 钦_79f7 | 来源:发表于2019-12-18 11:27 被阅读0次
  • content://sms/ 所有短信的URI

  • content://sms/88 指定id的URI

    • 删除某条短信,会触发URI的回调
  • content://sms/inbox 收件箱的所有短信(不包含发送的)

  • content://sms/conversations/1 指定会话(某个联系人)的所有收发短信

  • content://sms/status/88 指定id的送达状态监听URI

  • content://sms?in_blocked_wl=true&in_private_wl=true

短信记录的字段说明

  • _id: 主键
  • thread_id: 会话id,同一聊天对象处于同一个会话列表中,此字段即是标记当前会话列表的id
  • address:收件人的号码
  • status: 短信状态,default-1 -1:接收/保存草稿箱,0:完成,32:发出 64:等待, 128:失败
  • type: 类型,1接收 2 发出 3:草稿 4:发件箱 5:失败 6:排队
  • body: 短信内容
  • sim_id:发送当前短信的SIM卡的id,即在content://telephony/siminfo表中的主键
  • date: 短信记录发生的时间
_id=20
thread_id=5
address=1851006****eF8dE0__9OaYcxtZwan2K
person=null
date=1554973055654
date_sent=1554973019000
protocol=0
read=1
status=-1
type=1
reply_path_present=0
subject=null
body=不不不不将就
service_center=null
locked=0
error_code=0
seen=1
timed=0
deleted=0
sync_state=2
marker=102876701341068800
source=NDUzNDgwMTYwNzA4ODU0NDA6MDo1MGQ0YzA4MTMwMGIwMzUwOWQyNzAxOTRmN2QwNTc3YjoxNTU0OTczMDU1NjU0
bind_id=45348016070885440
mx_status=0
mx_id=null
mx_id_v2=null
out_time=0
account=2223689376
sim_id=1
block_type=0
advanced_seen=3
b2c_ttl=0
b2c_numbers=null
fake_cell_type=0
url_risky_type=0
creator=null
favorite_date=0

会话 conversations

获取所有会话,并删除

content://sms/conversations/

        val cursor = resolver.query(Uri.parse("content://sms/conversations/"), null, null, null, "date desc")
                ?: return
        Logs.d("clearSms: count ${cursor.count}")
        while (cursor.moveToNext()) {
            Logs.i("clearSms: =============start===========")
            for (i in 0 until cursor.columnCount){
                val columnName = cursor.getColumnName(i)
                val value = cursor.getString(i)
                Logs.d("clearSms: $columnName=$value")
            }
            Logs.i("clearSms: =============end===========")
        }
        cursor.close()

当不知道会包含什么字段时,可以通过此方法来遍历获取

snippet=对不起,您发送的指令或号码不正确,请核对后重新发送。
thread_id=3
msg_count=8

conversations Uri 对应返回的字段

thread_id:当前会话的id
msg_count: 当前会话包含多少消息
snippet: 当前会话的一条消息内容(一般是最近的一条内容展示)

删除短信的操作 以及设置默认短信程序

Android 4.4 之后,系统只允许默认的短信应用,可以删除等写入短信的操作

设置默认短信程序

  • 弹框提示
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivity(intent)

此种方式是由系统提供的交互方式用以更改默认短信程序。但是在MIUI系统中把这个弹框的可选项交互给去掉了,只允许选择系统短信程序,也就是说 即使弹框了,也只能选择默认的系统短信应用。

  • 反射方式
try {
    val clazz = Class.forName("com.android.internal.telephony.SmsApplication")
    val method = clazz.getMethod("setDefaultApplication", String::class.java, Context::class.java)
    method.invoke(null, packageName, this)
} catch (e: Exception) {
    e.printStackTrace()
}

此方式会出现反射调用失败的case,即系统层限制了反射的调用,结果仍然是失败的。即:无法修改默认短信程序。

相关文章

网友评论

      本文标题:红米系统短信机制

      本文链接:https://www.haomeiwen.com/subject/vnnynctx.html