getString("android.text") returns SpannableString 而不是 String

getString("android.text") returns SpannableString instead of String

我正在尝试使用以下方式获取通知内容:

val sender = sbn.notification.extras.getString("android.title")
val msg = sbn.notification.extras.getString("android.text")

android.titlereturns想要的值,但是android.textreturnsnull.

经过调试发现:

W/Bundle: Key android.text expected String but value was a android.text.SpannableString. The default value <null> was returned.
W/Bundle: Attempt to cast generated internal exception:
java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String

为什么 android.text 返回 SpannableString?在这种情况下如何将其转换为 String

正在检索 SpannableString

如果您无法控制 intent extras 中的内容,您应该可以使用以下代码检索它:

val msg = sbn.notification.extras.getCharSequence("android.text").toString()

请注意 SpannableString class 扩展了 CharSequence

添加附加功能

无论您在何处添加额外内容请确保您添加的不是 SpannableString,而是字符串本身!

例如,对于 editText:

var editText: EditText = ...

extras.put("android.text", editText.text) // this will put an Editable which is a Spannable and not a string

extras.put("android.text", editText.text.toString()) // this puts a string