如何从 BroadcastReceiver 在 Activity 中发送和保存字符串消息
Posted
技术标签:
【中文标题】如何从 BroadcastReceiver 在 Activity 中发送和保存字符串消息【英文标题】:How to send and save string message in Activity from BroadcastReceiver 【发布时间】:2020-03-14 13:01:49 【问题描述】:如何保存来自 BroadcastReceiver 的字符串消息并在 Activity 中使用保存的变量?我只找到 Toast.makeText 示例。 我实际拥有的是:正在工作的、已注册的 BroadcastReceiver。我的应用程序在 DocumentActivity 中运行,当我点击我的 DataCollectionTerminal 上的扫描按钮(android 7.0 上的 DTC)时,DTC 接收消息并为其吐司。我可以在打开的 EditText 中捕获来自 DTC 的消息并将其保存在单击保存按钮上。
但我需要的是:按下扫描按钮 => DTC 获取条形码消息 => 发送到 Activity 并将其保存到某个变量 => 我可以在整个 Activity 中使用这个 var.value,设置它 TextView,写它到txt文档等。
文档活动
class DocumentActivity : AppCompatActivity()
private val customBroadcastReceiver = CustomBroadcastReceiver()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(exp..R.layout.activity_document)
override fun onResume()
super.onResume()
registerReceiver(
customBroadcastReceiver,
IntentFilter ("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST")
)
override fun onStop()
super.onStop()
unregisterReceiver(customBroadcastReceiver)
fun saveMessage(mes: String)
var code = mes
Toast.makeText(applicationContext, code, Toast.LENGTH_SHORT).show()
...
广播接收器
class CustomBroadcastReceiver : BroadcastReceiver()
override fun onReceive(context: Context, intent: Intent)
val type = intent.getStringExtra("EXTRA_BARCODE_DECODING_SYMBOLE")
val barcode = intent.getStringExtra("EXTRA_BARCODE_DECODING_DATA")
val sb = StringBuilder()
sb.append("Type: $type, Barcode:$barcode\n")
Toast.makeText(context, sb.toString(), Toast.LENGTH_SHORT).show()
// Save mes, doesnt work
DocumentActivity().saveCell(barcode)
【问题讨论】:
【参考方案1】:您正在创建 DocumentActivity 的另一个对象并将值保存在该对象的变量中,因此它不会反映在当前对象中。尝试使变量静态,然后从广播接收器更新它。例如 DocumentActivity 中的变量是 barCodeVal 所以,
在文档活动中
companion object
var barcodeVal = //some default value
然后从广播接收者
DocumentActivity.barcodeVal = barcode
【讨论】:
感谢您的回答。我可以从 onReceive 调用一些函数吗?我的意思是每次收到消息时,我都需要运行一些函数来检查barcodeVal并将其写入文本文件。 我从以下位置找到答案:***.com/a/22241844/8315239 创建第二个 BCReceiver 并从第一个捕获 BCmessage 是的,使该函数静态(写入伴随对象块内)。如果您认为答案有帮助,请接受它作为答案。当然,您也可以使用其他广播。以上是关于如何从 BroadcastReceiver 在 Activity 中发送和保存字符串消息的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 BroadCastReceiver 发送到正在运行的服务 (Android)
如何在 BroadcastReceiver 中添加 Snackbars?
如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段
GCM 如何使用 BroadCastReceiver 处理应用程序