如何从 BroadcastReceiver 发送和保存 Activity 中的字符串消息

How to send and save string message in Activity from BroadcastReceiver

如何从 BroadcastReceiver 中保存字符串消息并在 Activity 中使用保存的变量?我只找到 Toast.makeText 个示例。 我实际拥有的是:工作、注册的 BroadcastReceiver。我的应用程序 运行 在 DocumentActivity 中,当我点击 DataCollectionTerminal 上的“扫描”按钮时(Android 7.0 上的 DTC),DTC 获取消息并烤它。我可以在打开的 EditText 中捕获来自 DTC 的消息并将其保存在单击保存按钮上。

但我需要的是:按下扫描按钮 => DTC 获取条形码消息 => 发送到 Activity 并将其保存到某个变量 => 我可以完整地使用这个 var.value Activity,设置TextView,写入txt文档等

文档Activity

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)
}}

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

在文档活动中

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

然后从 broabcastreceiver

DocumentActivity.barcodeVal = barcode