Android - 测量通过 Intent 打开 Activity 与收到结果之间的时间

标签 android qr-code zxing nanotime

我有一个简单的应用程序,可以打开 ZXing 的条码扫描器应用程序。

现在,我想知道完成扫描需要多长时间。基本上,从 Intent 开始到获得结果的时间。现在,我知道这很简单,只需在执行 Intent 时放置一个 nanoTime 对象,在我得到结果时放置另一个 nanoTime 对象,将两者相减并相乘得到以秒/毫秒为单位的结果。

但是,我打算循环,因为我想扫描一系列 QR 码,我认为 for 循环是最好的方法。

所以我有几个全局时间变量 长开始、结束、时间;

这是 Intent 的代码:

//Multi Scan Button
public Button.OnClickListener onMultiScan = new Button.OnClickListener() {
    public void onClick(View v) {

        //start = System.nanoTime();

        for(int i = 0 ; i < 5 ; i++){
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage("com.google.zxing.client.android");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

            //start = System.nanoTime();                

            startActivityForResult(intent, multiScan);


            }


    }
};

这是获取输入的代码。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //ordinary scan
    if (requestCode == ordinaryScan) {

        if (resultCode == RESULT_OK) {

            end = System.nanoTime();
            time = (end - start) / 1000000;
            System.out.println("Time" + " " + /*i +  +*/ time);

            String contents = data.getStringExtra("SCAN_RESULT");
            Toast.makeText(getApplicationContext(), contents, Toast.LENGTH_SHORT).show();

        }

        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }

    //multiple scan
    if (requestCode == multiScan) {
        end = System.nanoTime();
        time = (end - start) / 1000000;
        System.out.println("Time" + " " + /*i +  +*/ time);

        if (resultCode == RESULT_OK) {
            String content = data.getStringExtra("SCAN_RESULT");
            //codes = codes + contents + " ";
            inputs[counter] = content;
            counter += 1;

            if(counter == 5){
                //output();
                verify();
            }

        }


        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
 }

我注释掉了启动计时器的部分,因为我不确定将它们放在哪里。会发生什么情况是,如果我在循环之前调用它,我只会得到一个结果,如果我把它放在循环中,我会得到多个结果,它们彼此相差不远。

如果只调用一次,获取完成 Intent 所需的时间很容易,但如果在循环中调用多次,就会变得棘手。

那么,有没有一种方法可以适本地占用 intent 打开并获得结果所需的时间?我愿意接受建议,即使这意味着我不止一次地重写我调用 Activity 的方式(我目前正在使用循环)。

我还希望能够在扫描代码后立即获得时间,这样我就知道 Activity 调用和 Activity 结果之间的时间。我不想等到每个电话都结束后才知道每个电话完成所花费的时间。我想要实时更新。谢谢。

最佳答案

如果您仍想使用循环,一种可能的方法是不使用单个多扫描请求代码,而是为循环的每次运行使用一个。

类似startActivityForResult(intent, MULTISCAN_BASE + i);

通过这种方式,您将能够单独跟踪所有运行,因为您将能够识别结果指的是哪个运行:

i = requestCode - MULTISCAN_BASE

最后一步是将您的开始时间放入一个数组中,每个循环对应一个数组。

int[] start = new int[5];

然后检查您何时完成并获得时间总和是微不足道的。

关于Android - 测量通过 Intent 打开 Activity 与收到结果之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009466/

相关文章:

android - 自动更正和限制的 StageText 问题

android - 无法在特定设备上为 ReadWirte 打开数据库

java - ANDROID onBackPressed 不适用于该 Activity

python - 在 Python (PyQt) 中创建二维码

cordova - Cordova如何扫描设备相册中包含二维码的图片

java - ZXing 如何使用手电筒启动扫描仪?

android - 使用 DefaultItemAnimator 时,StaggeredGridLayoutManager 的移动动画被破坏

ios - 如何加密/解密安全 QR - 在 Swift 中编码为可读格式

java - 旧库 zxing 未在我的应用程序中运行