【问题标题】:How to send and save string message in Activity from BroadcastReceiver如何从 BroadcastReceiver 在 Activity 中发送和保存字符串消息
【发布时间】: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)
}}

【问题讨论】:

    标签: android android-activity broadcastreceiver


    【解决方案1】:

    您正在创建 DocumentActivity 的另一个对象并将值保存在该对象的变量中,因此它不会反映在当前对象中。尝试使变量静态,然后从广播接收器更新它。例如 DocumentActivity 中的变量是 barCodeVal 所以,

    在文档活动中

    companion object{
      var barcodeVal = //some default value
    }
    

    然后从广播接收者

    DocumentActivity.barcodeVal = barcode
    

    【讨论】:

    • 感谢您的回答。我可以从 onReceive 调用一些函数吗?我的意思是每次收到消息时,我都需要运行一些函数来检查barcodeVal并将其写入文本文件。
    • 我从以下位置找到答案:stackoverflow.com/a/22241844/8315239 创建第二个 BCReceiver 并从第一个捕获 BCmessage
    • 是的,使该函数静态(写入伴随对象块内)。如果您认为答案有帮助,请接受它作为答案。当然,您也可以使用其他广播。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多