Android-测量通过intent打开活动与收到结果之间的时间

Android-测量通过intent打开活动与收到结果之间的时间,android,qr-code,zxing,nanotime,Android,Qr Code,Zxing,Nanotime,我有一个简单的应用程序,可以打开ZXing的条形码扫描仪应用程序 现在,我想知道扫描需要多少时间才能完成。基本上,从意图开始到获得结果的时间。现在,我知道这很简单,只要在执行意图时放置一个nanoTime对象,在得到结果时放置另一个nanoTime对象,将两者相减,然后相乘,以秒/毫秒为单位得到它 然而,我有循环的意图,因为我想扫描一系列的QR码,我认为for循环是最好的方法 所以我有几个全局时间变量 漫长的开始、结束、时间 以下是意图的代码: //Multi Scan Button publi

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

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

然而,我有循环的意图,因为我想扫描一系列的QR码,我认为for循环是最好的方法

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

以下是意图的代码:

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


            }


    }
};
我注释掉了我启动计时器的部分,因为我不确定把它们放在哪里。如果我在循环之前调用它,我只会得到一个结果,如果我把它放在循环中,我会得到多个彼此距离不远的结果

如果只调用一次,那么获得完成意图所需的时间是很容易的,但是如果在循环中多次调用,则会变得很棘手

那么,有没有一种方法可以适当地花费时间来打开一个意图并获得结果呢?我愿意接受建议,即使这意味着要多次重写如何调用活动(我目前正在使用循环)


我还希望能够在扫描代码后立即获得时间,这样我就知道活动调用和活动结果之间的时间。我不想等到每次通话结束后才知道每次通话结束所需的时间。我想要实时更新。谢谢。

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

int[] start = new int[5];
类似于
startActivityForResult(intent,MULTISCAN_BASE+i)

通过这种方式,您将能够单独跟踪所有跑步,因为您将能够识别结果所指的跑步:

i = requestCode - MULTISCAN_BASE
最后一步是将开始时间放入一个数组中,每个循环一个开始时间

int[] start = new int[5];

检查何时完成并获得时间的总和是很简单的。

如果仍然要使用循环,一种可能的方法是不使用单个multiscan请求代码,而是为循环的每次运行使用一个

int[] start = new int[5];
类似于
startActivityForResult(intent,MULTISCAN_BASE+i)

通过这种方式,您将能够单独跟踪所有跑步,因为您将能够识别结果所指的跑步:

i = requestCode - MULTISCAN_BASE
最后一步是将开始时间放入一个数组中,每个循环一个开始时间

int[] start = new int[5];

检查何时完成并得到时间的总和就很简单了。

好的,找到了一种方法让它工作起来。老实说,这有点粗制滥造,但它可以实时工作和更新。基本概念是让multiScan requestCode在每次给出onActivityResult方法中处理的结果时递增。然后有一个if语句检查multiScan请求代码是否达到了所需的最大迭代次数

以下是全局变量:

int multiScan = 1;
int multiScanBase = 1;
long start, end, time;
然后,
multiscan按钮
看起来像:

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

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

    }
};
然后,onActivityResult的
方法将如下所示:

//multiple scan
if (requestCode < multiScanBase + 5 ) {
        end = System.nanoTime();

        time = (end - start) / 1000000;
        System.out.println("Request Code = " + multiScan);

        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
        }

            //This is the part where I check for the requestCode
            //In this example, I wanted to iterate the activity 5 times
            //So if the request code is still less than the base + number of iterations
            //Increment the multiScan requestCode and run the method again
            //In this way, the time for each scan is given in real time
        if(requestCode < multiScanBase + 5){
            multiScan += 1;
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage("com.google.zxing.client.android");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

            startActivityForResult(intent, multiScan);

        }
 }
//多次扫描
if(请求代码<多扫描库+5){
end=System.nanoTime();
时间=(结束-开始)/1000000;
System.out.println(“请求代码=“+multiScan”);
System.out.println(“时间”+“”+/*i++*/Time);
if(resultCode==RESULT\u OK){
字符串内容=data.getStringExtra(“扫描结果”);
//代码=代码+内容+“”;
输入[计数器]=内容;
计数器+=1;
如果(计数器==5){
//输出();
验证();
}
}   
else if(resultCode==RESULT\u取消){
//处理取消
}
//这是我检查请求代码的部分
//在这个例子中,我想迭代活动5次
//因此,如果请求代码仍然小于基本+迭代次数
//递增multiScan requestCode并再次运行该方法
//这样,每次扫描的时间都是实时的
if(请求代码<多扫描库+5){
多扫描+=1;
Intent=newintent(“com.google.zxing.client.android.SCAN”);
setPackage(“com.google.zxing.client.android”);
意向。额外(“扫描模式”、“二维码模式”);
startActivityForResult(意图,多扫描);
}
}
就这样。代码为我工作,并实时更新。谢谢你提出的关于如何做到这一点的想法


大家圣诞快乐。

好的,找到一个方法让它工作。老实说,这有点粗制滥造,但它可以实时工作和更新。基本概念是让multiScan requestCode在每次给出onActivityResult方法中处理的结果时递增。然后有一个if语句检查multiScan请求代码是否达到了所需的最大迭代次数

以下是全局变量:

int multiScan = 1;
int multiScanBase = 1;
long start, end, time;
然后,
multiscan按钮
看起来像:

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

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

    }
};
然后,onActivityResult的
方法将如下所示:

//multiple scan
if (requestCode < multiScanBase + 5 ) {
        end = System.nanoTime();

        time = (end - start) / 1000000;
        System.out.println("Request Code = " + multiScan);

        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
        }

            //This is the part where I check for the requestCode
            //In this example, I wanted to iterate the activity 5 times
            //So if the request code is still less than the base + number of iterations
            //Increment the multiScan requestCode and run the method again
            //In this way, the time for each scan is given in real time
        if(requestCode < multiScanBase + 5){
            multiScan += 1;
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage("com.google.zxing.client.android");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

            startActivityForResult(intent, multiScan);

        }
 }
//多次扫描
if(请求代码<多扫描库+5){
end=System.nanoTime();
时间=(结束-开始)/1000000;
System.out.println(“请求代码=“+multiScan”);
System.out.println(“时间”+“”+/*i++*/Time);
if(resultCode==RESULT\u OK){
字符串内容=data.getStringExtra(“扫描结果”);
//代码=代码+内容+“”;
输入[计数器]=内容;
计数器+=1;