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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast相关的知识,希望对你有一定的参考价值。

我是android开发的新手,正在尝试调试和了解在Android上运行以扫描条形码的应用程序。请参阅SotfScanService.java以获取完整的源代码。

以下方法应该将扫描后的条形码数据后缀附加到某处。但我不知道在哪里。我认为它会发送到已订阅该特定意图的一个或多个应用程序。

  1. 有人可以解释一下下面执行sendBroadcast()会发生什么情况吗?
  2. android.rfid.INPUT是其他应用程序可以理解的标准动作吗?

我正在调试此应用程序,因为在Android设备上的浏览器中运行的网页无法接收到作为keydown / keypress事件的扫描条形码,并且仅当输入焦点不在文本框中时才附加后缀。

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

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

以上是关于使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast的主要内容,如果未能解决你的问题,请参考以下文章

使用 Maven 的具有多个子项目的 Spring MVC 项目的包结构

如何在具有多个子项目的 SBT 项目中覆盖子项目中的设置

在具有多个目的地的移动设备上启动地图应用程序

实体框架 - 将表拆分为具有重叠条件的多个实体

select2 jquery插件重置具有预选项目的选择元素

子项目的 Xcode 环境变量