Я реализовал программу сканирования штрих-кодов, которая захватывает штрих-коды из службы сканирования штрих-кодов.В этой программе я иногда открываю диалоговое окно с полем editText для получения дополнительной информации, я хотел бы знать, как я могу получить службу для отправки штрих-кода в этот alertDialog.
Когда этот alertDialog закрыт, штрих-код должензатем снова отправляются в открытое действие.
Вот как я могу отправить / получить сообщения
class SomeActivity : AppCompatActivity() {
/* variables to communicate with scanning services */
private var mService: Messenger? = null
private var mBound: Boolean = false
private val mMessenger: Messenger = Messenger(IncomingHandler(this))
/* service connection which binds to the scanning SDK for IPC */
private val connection: ServiceConnection = object: ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
/* connect to service*/
mService = Messenger(service)
/* Register to the scanner */
val msg: Message = Message.obtain(null, MSG_REGISTER)
msg.replyTo = mMessenger
mService?.send(msg)
}
override fun onServiceDisconnected(name: ComponentName?) {
/* In the case of unexpected disconnection */
mService = null
}
}
/* Handles inbound IPC messages and figures out what to do with them */
inner class IncomingHandler(
context: Context
) : Handler() {
override fun handleMessage(msg: Message){
when(msg.what) {
MSG_BARCODE ->{
val bcodeBundle = msg.data
val bcodeData = bcodeBundle.getString("barcode")
val bcodeType = bcodeBundle.getString("type")
barcodeScanned(bcodeData!!,bcodeType!!)
}
else ->
super.handleMessage(msg)
}
}
}
в другом месте действия
Сообщениефункция создания
private fun getMsg(msgCode: Int) : Message{
val msg: Message = Message.obtain(null, msgCode)
msg.replyTo = mMessenger
return msg
}
Пример отправки сообщения
val newmsg: Message = Message.obtain(null, MSG_REBARCODE, 0, 0)
val bundle = Bundle()
bundle.putString("barcode",dialog.manualBarcode)
bundle.putString("type","MANUAL")
newmsg.data = bundle
mService?.send(newmsg)
Привязка к сервису
if (!mBound){
mBound = bindScanner(this,versionSDK, connection)
mBound = true
mService?.send(getMsg(MSG_START))
}
Отвязка
unbindService(connection)
ПользовательскийAlertDialog вызов в рамках действия
val dialog = CustomDialog(variousVariables...)
dialog.show()
, как создается пользовательский диалог
class CustomDialog (val theContext: Context, other data...)
: AlertDialog(theContext) {
init{
requestWindowFeature(Window.FEATURE_NO_TITLE)
setCancelable(false)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val window = this.window
val display = theActivity.windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val width = size.x
val height = size.y
window?.setLayout(width,(height/96)*100)
setContentView(R.layout.dialog_enter_additional_data)
this.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
this.window?.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
this.window?.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
//Etc...
}