使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast

人生必须的知识就是引人向光明方面的明灯。这篇文章主要讲述使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast相关的知识,希望能为你提供帮助。
bounty到期在5天内。该问题的答案有资格获得+ 300声望赏金。Gyrocode.com正在寻找来自信誉良好的来源的答案。我是android开发的新手,正在尝试调试和了解在Android上运行以扫描条形码的应用程序。请参阅SotfScanService.java以获取完整的源代码。
以下方法应该将扫描后的条形码数据后缀附加到某处。但我不知道在哪里。我认为它会发送到已订阅该特定意图的一个或多个应用程序。

  1. 有人可以解释一下下面执行sendBroadcast()会发生什么情况吗?
  2. android.rfid.INPUT是其他应用程序可以理解的标准动作吗?
我正在调试此应用程序,因为在Android设备上的浏览器中运行的网页无法接收到作为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) ; }

答案
  1. 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) ; }

  2. android.rfid.INPUT
    作者只是以这种方式命名,其他应用程序对此一无所知,除非其他应用程序以准确的名称android.rfid.INPUT接收相同的广播。广播可用作跨应用程序的消息传递系统,并且可用作开发人员打算接收通过ScanBroadcast方法发送的广播的正常用户流之外的消息传递系统。不使用代码,仅研究流程,我认为这是一种自动化的方法,具体取决于从前面提到的意图中收到的结果。
  3. 最后但并非最不重要的一点,我建议您将所有值打印到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) ; }

    您可能知道,我没有输入设备以及扫描数据对象,所以这是我所能提供的最大帮助。

    推荐阅读