人生必须的知识就是引人向光明方面的明灯。这篇文章主要讲述使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast相关的知识,希望能为你提供帮助。
bounty到期在5天内。该问题的答案有资格获得+ 300声望赏金。Gyrocode.com正在寻找来自信誉良好的来源的答案。我是android开发的新手,正在尝试调试和了解在Android上运行以扫描条形码的应用程序。请参阅SotfScanService.java以获取完整的源代码。
以下方法应该将扫描后的条形码数据后缀附加到某处。但我不知道在哪里。我认为它会发送到已订阅该特定意图的一个或多个应用程序。
- 有人可以解释一下下面执行
sendBroadcast()
会发生什么情况吗? android.rfid.INPUT
是其他应用程序可以理解的标准动作吗?
keydown
/ keypress
事件的扫描条形码,并且仅当输入焦点不在文本框中时才附加后缀。【使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast】SotfScanService.java:
private void sendToInput(String data , boolean enterFlag){
String result = getfixChar(data);
String append = getAppendChar();
switch (append) {
case "1":
enterFlag = true ;
break ;
case "2":
result += "
";
break ;
case "3":
result += " ";
break ;
case "4":break ;
}Intent toBack = new Intent() ;
toBack.setAction("android.rfid.INPUT") ;
toBack.putExtra("data", result );
//发送添加前缀后缀的数据
toBack.putExtra("enter", enterFlag) ;
sendBroadcast(toBack) ;
}
答案
sendBroadcast
[进入sendBroadcast
之前,我们首先需要知道Broadcast是什么。 Android应用程序可以从Android系统和其他Android应用程序发送或接收广播消息,类似于发布-订阅设计模式。当感兴趣的事件发生时,将发送这些广播。例如,Android系统会在发生各种系统事件时(例如,系统启动或设备开始充电时)发送广播。应用程序还可以发送自定义广播,例如,以向其他应用程序通知他们可能感兴趣的内容(例如,已下载一些新数据)。
[从代码的GitHub存储库开始,我从头到尾大致进行了遍历,它看起来像是一个自动化应用程序,它涉及扫描某些东西(RFID,条形码?)。我已经注释掉了此方法之前和之后的过程,详细信息如下。
private void sendToInput(String data , boolean enterFlag){//getfixChar(data): It gets and processes data which stored in SharedPreferences Strings, //namely prefix_config and suffix_config. //The return value will be the data with prefix and suffix (prefix + data + suffix) String result = getfixChar(data); //getAppendChar(): It get the String stored in SharedPreference, which is append_ending_char, with default value 4. //If there's no value stored in append_ending_char, it will return 4, and otherwise (1, 2, or 3) String append = getAppendChar(); switch (append) { case "1": enterFlag = true ; break ; case "2": result += " "; break ; case "3": result += " "; break ; case "4":break ; } //After getting and processing all the values and stored in result and append respectively. //The values are stored in the Intent extra, namely data and enter. //It will be send via Broadcast Intent toBack = new Intent() ; toBack.setAction("android.rfid.INPUT") ; toBack.putExtra("data", result ) ; //发送添加前缀后缀的数据 //Translation: Sending data with prefix and suffix added toBack.putExtra("enter", enterFlag) ; sendBroadcast(toBack) ; }
android.rfid.INPUT
作者只是以这种方式命名,其他应用程序对此一无所知,除非其他应用程序以准确的名称android.rfid.INPUT
接收相同的广播。广播可用作跨应用程序的消息传递系统,并且可用作开发人员打算接收通过ScanBroadcast方法发送的广播的正常用户流之外的消息传递系统。不使用代码,仅研究流程,我认为这是一种自动化的方法,具体取决于从前面提到的意图中收到的结果。
- 最后但并非最不重要的一点,我建议您将所有值打印到
logcat
(调试控制台/终端)中,以便您知道哪一部分出了问题。
例如:
private void sendToInput(String data , boolean enterFlag){ String result = getfixChar(data); Log.d("result", result); String append = getAppendChar(); Log.d("append", append); switch (append) { case "1": enterFlag = true ; break ; case "2": result += " "; break ; case "3": result += " "; break ; case "4":break ; } //Last but not least, double check here. Log.d("result2", result); Log.d("enterFlag", enterFlag); Intent toBack = new Intent() ; toBack.setAction("android.rfid.INPUT") ; toBack.putExtra("data", result ); //发送添加前缀后缀的数据 toBack.putExtra("enter", enterFlag.toString()) ; sendBroadcast(toBack) ; }
您可能知道,我没有输入设备以及扫描数据对象,所以这是我所能提供的最大帮助。
推荐阅读
- Android studio ConstraintLayout大小调整问题
- App Engine模块之间的快速通信方式
- Unity IAP在Apple Testflight中不起作用
- 未找到模块'apple_sign_in'
- 如何使用C语言中的星号打印带有对角线的空心方形/矩形/矩形图案
- 使用React Native开发跨平台移动应用程序的路线图
- 如何使用Plesk在Debian 9和Ubuntu 18.04上的Plesk中安装PHP 5.6
- 如何在Paint.net中以WebP格式保存图像
- 如何在Visual Studio Code中突出显示颜色(RGB,十六进制,HSL,RGBA)